如何在Ruby 2.0中传递可选的命名参数

Kri*_*ris 5 ruby

有没有一种方法是真正可选的,所以我知道它是否由调用者设置了吗?

将参数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)

Bro*_*tse 6

最好的方法可能是:

def bar(name: nil)
  name ||= 'unknown'
  puts name
end
Run Code Online (Sandbox Code Playgroud)