我想测试是否传递了关键字参数。

def test(:name, :zip)
  if name.key.present?
     #then do stuff
  end
end

我不想只检查nil,而是因为如果nil是故意通过的
test(name: nil, zip: 10011),我希望该方法以不同的方式处理散列,然后如果从未传递过关键字对。test(zip: 10011)
如何检查是否向该方法传递了关键字/值对?

最佳答案

您的代码不起作用,关键字参数定义为key: defaultvalue
您可以将“不可能”值定义为默认值并进行检查。
“不可能”是指永远不会用作参数的值。

def test(name: :just_some_stupd_content, zip: nil)
  if name == :just_some_stupd_content
    puts 'Name is not set'
  else
    puts 'Name is set'
     #then do stuff
  end
end

test(name: nil, zip: 10011)
test(zip: 10011)

如果你用这个逻辑
test(name: :just_some_stupd_content, zip: 10011)

所以它不是防弹的,但我认为这是一种有用的方法。
Ruby>=2.1的解决方案
Ruby 2.1引入了必需的关键字参数,这些参数用一个尾随的冒号定义:
def test(name:, zip: nil)
    puts 'Name is set'
end

test(name: nil, zip: 10011)
test(zip: 10011)  #raises missing keyword: name (ArgumentError)

如果是根据你的需要,如果这个解决方案更适合。

关于ruby-on-rails - 检查是否传递了ruby关键字参数(RUBY),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57929071/

10-11 04:21
查看更多