【问题标题】:Ruby 1.9.2 - multiple splat argument issueRuby 1.9.2 - 多个 splat 参数问题
【发布时间】:2011-07-13 07:25:48
【问题描述】:

Ruby 新手,正在解决我试图在方法中接受多个 splat 参数的问题。我想我明白为什么它给我编译错误,但我不知道如何解决它。有关如何在参数中使用多个 splat 的任何帮助都会有所帮助。在此先感谢您的任何指导。

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)

【问题讨论】:

  • 通过使您的 splat 参数成为普通参数,例如删除 *,您的代码应该可以按照您现在使用的方式完美运行。当您使用数组调用方法时,不需要 splat 参数。此外,两个 splat 参数没有任何意义,因为无法确定第一个何时结束,另一个何时开始。

标签: ruby methods arguments splat


【解决方案1】:

使用 splat 参数的示例:

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

puts sum(1,2,3)

注意参数是如何直接指定的,而不是在 [] 中。

如果该方法定义了第二个 splat 参数,则无法确定第一个结束和第二个开始的时间。

【讨论】:

  • 感谢 gnab - 非常感谢!
猜你喜欢
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
相关资源
最近更新 更多