当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Module.ruby2_keywords用法及代码示例


本文简要介绍ruby语言中 Module.ruby2_keywords 的用法。

用法

ruby2_keywords(method_name, ...) → nil

对于给定的方法名称,将方法标记为通过普通参数 splat 传递关键字。这只应在接受参数 splat (*args) 但不接受显式关键字或关键字 splat 的方法上调用。它标记该方法,以便如果使用关键字参数调用该方法,则使用特殊标志标记最终哈希参数,以便如果它是正常参数的最终元素,则向另一个方法调用发送,并且该方法调用不包括显式关键字或关键字 splat,最终元素被解释为关键字。换句话说,关键字将通过该方法传递给其他方法。

这应该只用于将关键字委托给另一个方法的方法,并且只用于向后兼容 Ruby 3.0 之前的版本。看www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/了解原因的详细信息ruby2_keywords存在以及何时以及如何使用它。

这种方法可能会在某个时候被删除,因为它的存在只是为了向后兼容。由于它在 2.7 之前的 Ruby 版本中不存在,因此在调用它之前检查模块是否响应此方法:

module Mod
  def foo(meth, *args, &block)
    send(:"do_#{meth}", *args, &block)
  end
  ruby2_keywords(:foo) if respond_to?(:ruby2_keywords, true)
end

但是,请注意,如果删除ruby2_keywords 方法,使用上述方法的foo 方法的行为将发生变化,因此该方法不会通过关键字。

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Module.ruby2_keywords。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。