在Ruby中是否有一个需要关键字参数的内置方法?

时间:2013-11-12 19:54:37

标签: ruby syntax

我知道在Ruby 2.0及更高版本中你可以使用关键字参数,这样你就可以定义这样的方法:

def foo(inline_argument, *args, **kwargs, &block)
  puts 'bar'
end

但是,我想知道:是否有一个使用关键字参数的内置方法?

1 个答案:

答案 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