方法配置文件中的双splat和默认值

时间:2015-11-19 23:18:42

标签: ruby

虽然具有默认值配置文件的方法可以接受nil(除了哈希):

def f(options = {})
  options
end

f(hoge: "AAA", foo: "BBB") #=> {:hoge=>"AAA", :foo=>"BBB"}
f(nil) #=> nil

双splat方法会引发nil的错误:

def f(**options)
  options
end

f(hoge: "AAA", foo: "BBB") #=> {:hoge=>"AAA", :foo=>"BBB"}
f(nil) # => wrong number of arguments (1 for 0) (ArgumentError)

我什么时候应该使用双splat,何时应该使用= {}

1 个答案:

答案 0 :(得分:1)

如果方法的输入必须是选项哈希,那么,使用双splat运算符**

使用options = {}仅声明默认值为空哈希,但是,它不一定保证调用者将传递哈希值 - 她可以传递非哈希值和nil。

如果函数是使用双splat(**)实现的 - 正如您提供的示例中所示 - 那么非hash和nil值将不被接受并将被报告为错误。