本文简要介绍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 Module.remove_class_variable用法及代码示例
- Ruby Module.attr_accessor用法及代码示例
- Ruby Module.method_removed用法及代码示例
- Ruby Module.private用法及代码示例
- Ruby Module.deprecate_constant用法及代码示例
- Ruby Module.instance_method用法及代码示例
- Ruby Module.class_variables用法及代码示例
- Ruby Module.included_modules用法及代码示例
- Ruby Module.singleton_class?用法及代码示例
- Ruby Module.module_exec用法及代码示例
- Ruby Module.included用法及代码示例
- Ruby Module.include?用法及代码示例
- Ruby Module.module_eval用法及代码示例
- Ruby Module.extend_object用法及代码示例
- Ruby Module.class_exec用法及代码示例
- Ruby Module.autoload用法及代码示例
- Ruby Module.ancestors用法及代码示例
- Ruby Module.class_variable_get用法及代码示例
- Ruby Module.class_variable_defined?用法及代码示例
- Ruby Module.method_defined?用法及代码示例
- Ruby Module.new用法及代码示例
- Ruby Module.obj ==用法及代码示例
- Ruby Module.const_missing用法及代码示例
- Ruby Module.instance_methods用法及代码示例
- Ruby Module.autoload?用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Module.ruby2_keywords。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。