虽然具有默认值配置文件的方法可以接受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,何时应该使用= {}
?
答案 0 :(得分:1)
如果方法的输入必须是选项哈希,那么,使用双splat运算符**
。
使用options = {}
仅声明默认值为空哈希,但是,它不一定保证调用者将传递哈希值 - 她可以传递非哈希值和nil。
如果函数是使用双splat(**
)实现的 - 正如您提供的示例中所示 - 那么非hash和nil值将不被接受并将被报告为错误。