我知道在Ruby 2.0及更高版本中你可以使用关键字参数,这样你就可以定义这样的方法:
def foo(inline_argument, *args, **kwargs, &block)
puts 'bar'
end
但是,我想知道:是否有一个使用关键字参数的内置方法?
答案 0 :(得分:3)
我cd
加入我的Ruby安装目录并运行grep -r ', \*\*' .
并发现是的,stdlib中的方法使用**kwargs
,但只在open3.rb
中库。
./lib/ruby/2.1.0/open3.rb: def popen3(*cmd, **opts, &block)
./lib/ruby/2.1.0/open3.rb: def popen2(*cmd, **opts, &block)
./lib/ruby/2.1.0/open3.rb: def popen2e(*cmd, **opts, &block)
./lib/ruby/2.1.0/open3.rb: def capture3(*cmd, stdin_data: '', binmode: false, **opts)
./lib/ruby/2.1.0/open3.rb: def capture2(*cmd, stdin_data: '', binmode: false, **opts)
./lib/ruby/2.1.0/open3.rb: def capture2e(*cmd, stdin_data: '', binmode: false, **opts)
./lib/ruby/2.1.0/open3.rb: def pipeline_rw(*cmds, **opts, &block)
./lib/ruby/2.1.0/open3.rb: def pipeline_r(*cmds, **opts, &block)
./lib/ruby/2.1.0/open3.rb: def pipeline_w(*cmds, **opts, &block)
./lib/ruby/2.1.0/open3.rb: def pipeline_start(*cmds, **opts, &block)
./lib/ruby/2.1.0/open3.rb: def pipeline(*cmds, **opts)
修改强>:
在@mdesantis建议中,我为rb_get_kwargs
做了MRI identifier search;事实证明,C核心库中至少有一些使用关键字args的方法。
Dir.new( string, encoding: enc ) -> aDir
Array#sample(n, random: rng) -> new_ary
Array#shuffle!(random: rng) -> ary
GC.start(full_mark: false) -> nil