Search code examples
rubymethodsargumentssplat

Ruby 1.9.2 - multiple splat argument issue


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)

Solution

  • 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.