有没有一种方法是真正可选的,所以我知道它是否由调用者设置了吗?
将参数nil用作默认值是行不通的,因为无法知道调用方是否已通过nil或它是否为参数的默认值。
在命名参数之前,在Ruby 1.9中,使用options哈希:
def foo(options = {})
# …
bar(options)
end
def bar(options = {})
puts options.fetch(:name, ‘unknown’) # => 'unknown'
end
Run Code Online (Sandbox Code Playgroud)
使用Ruby 2.0命名参数:
def foo(name: nil)
# …
bar(name: name)
end
def bar(name: ‘unknown’)
# …
puts name # => nil, since nil is explicitly passed from `foo`
end
Run Code Online (Sandbox Code Playgroud)
最好的方法可能是:
def bar(name: nil)
name ||= 'unknown'
puts name
end
Run Code Online (Sandbox Code Playgroud)