ruby - splat 参数后的可选参数

标签 ruby

这是我的程序:

def calculate(*numbers, options = {})
  add(numbers)      if options[:add]
  subtract(numbers) if options[:add] == false
end

def add(*numbers)
  numbers.reduce(:+)
end

def subtract(*numbers)
  numbers.reduce(:-)
end

p calculate(1,2)

在第一行,它在提示

tests.rb:1: syntax error, unexpected '=', expecting ')'
def calculate(*numbers, options = {})
________________________________________________^
[Finished in 0.1s with exit code 1]

我认为这可能是 Ruby 中默认值的问题,因为在 v1.9 之前,您需要按顺序拥有所有默认值 - 但这不应该是问题,因为我的版本是

ruby 2.0.0p195 (2013-05-14) [i386-mingw32]

我试过调换所有空格,因为在涉及方法时,ruby 似乎对这些东西很特别,但没有骰子。

会不会是我的 splat 变量 *numbers

最佳答案

splat 后不能有可选参数。

splat 的意思是“用完所有剩余的参数”,但随后您提供了一个可选参数,那么解释器如何知道最后一个参数是“数字”splat 还是可选“选项”的一部分?

关于ruby - splat 参数后的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17173034/

相关文章:

ruby-on-rails - 内存缓存在使用 acts_as_cached 插件时获取错误的值

ruby-on-rails - jRuby bundle 安装错误

ruby - 许多嵌套 `for` 循环取决于变量

ruby-on-rails - 文件末尾到达 EOFError (Databasedotcom + Rails + Heroku)

ruby-on-rails - 为 Rails 3.1 中的特定路由强制使用 SSL

ruby - 如何将 File.join 与 File::ALT_SEPARATOR 一起使用?

ruby - 无法在 Ruby 中分配内存(无 MemoryError)?

ruby-on-rails - 如何让 `self`在类(class)工作

ruby-on-rails - 自定义验证器如何自动包含到模型中

jquery - Ruby on Rails 通过 ajax 搜索