ruby - 我可以在 Ruby 2.x 中要求命名参数吗?

标签 ruby arguments ruby-2.0 ruby-2.1

Ruby 2.0 正在添加命名参数,如下所示:

def say(greeting: 'hi')
  puts greeting
end

say                     # => puts 'hi'
say(greeting: 'howdy')  # => puts 'howdy'

如何在不提供默认值的情况下使用命名参数,以便它们是必需的?

最佳答案

Ruby 2.0.0 中没有具体的方法,但是你can do it Ruby 2.1.0 , 语法如 def foo(a:, b:) ...

在 Ruby 2.0.x 中,您可以通过放置任何引发异常的表达式来强制执行它,例如:

def say(greeting: raise "greeting is required")
  # ...
end

如果您打算经常这样做(并且不能使用 Ruby 2.1+),您可以使用如下辅助方法:

def required
  method = caller_locations(1,1)[0].label
  raise ArgumentError,
    "A required keyword argument was not specified when calling '#{method}'"
end

def say(greeting: required)
  # ...
end

say # => A required keyword argument was not specified when calling 'say'

关于ruby - 我可以在 Ruby 2.x 中要求命名参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250447/

相关文章:

ruby - 我如何通过 Salesforce REST API 获得写入权限?

javascript - JavaScript 函数中参数的大小会影响其性能吗?

ruby - 通过 302 重定向维护 session 和 cookie

ruby-on-rails - 无法使用 Ruby 2.0 运行 Unicorn

ruby - 意外返回(LocalJumpError)

Ruby 没有要加载的文件

ruby - 如何在 Ruby 中将包含时间的字符串拆分为多个部分

ruby - 有什么办法可以避免在 lambda 和 proc 上写 ".call"?

java - Mockito:如何验证传递给我的方法的数组是否包含正确的对象?

WordPress,wp_query 中的条件参数,OR