本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。