0

New to Ruby and working on a problem where I'm trying to accept multiple splat arguments in the method. I think I understand why it's giving me the compile error, but I'm not sure how to fix it. Any help with how to use multiple splats in the arguments would be helpful. Thank you in advance for any guidance here.

def find_max_expenses(salary, save_prcnt, *pre_ret_g_rates, *post_ret_g_rates, epsilon)
 years = pre_ret_g_rates.count
 savings = nest_egg_variable(salary, save_prcnt, pre_ret_g_rates)
 savings = savings[-1]
 low = 0
 high = savings
 expenses = (low + high) / 2

 # can use the [-1] at the end is equivalent to the code below
 remaining_money = post_retirement(savings, post_ret_g_rates, expenses)   #[-1]
 remaining_money = remaining_money[-1]
 while remaining_money > epsilon       # the value we want to stay above
  if remaining_money > 0
   low = expenses
  else
   high = expenses
  end
  expenses = (high + low) / 2
  remaining_money = post_retirement(savings, post_ret_g_rates, expenses)
  p remaining_money = remaining_money[-1]
 end
 p expenses
end
find_max_expenses(10000, 10, [3, 4, 5, 0, 3], [10, 5, 0, 5, 1], 0.01)
Gavin
  • 81
  • 7
  • 5
    By making your splat arguments ordinary arguments, e.g. removing the *, you code should be working perfectly the way you use it now. When you call your method with an array, there is no need for splat arguments. Also, two splat arguments makes no sense, because there is no way to determine when the first ends and the other begins. – gnab Mar 11 '11 at 07:28

1 Answers1

7

Example of using splat arguments:

def sum(*nums)
  sum = 0 
  nums.each do |num|
    sum += num 
  end 
  sum 
end

puts sum(1,2,3)

Notice how the arguments are specified directly, not inside [].

If the method defined a second splat argument, one couldn't determine when the first one ends and the second begins.

gnab
  • 9,251
  • 1
  • 21
  • 13