Ruby:如何检查一个块接受多少参数?

Mas*_*ler 2 ruby

我正在研究Ruby,尝试建立一个以块为参数的方法.我知道你这样做是通过给出一个&前缀的最后一个参数,但是一旦它被传递,我该如何验证呢?

例如,如果我想验证参数是否为字符串,我可以使用is_a?(String).但是,如何验证我收到的是一个接受1个参数的块?还是2?

Ren*_*non 7

您可以使用该Proc#arity方法检查块接受的参数数量:

def foo(&block)
  puts block.arity
end

foo { }        # => 0
foo { |a| }    # => 1
foo { |a, b| } # => 2
Run Code Online (Sandbox Code Playgroud)

从文档:

返回不会被忽略的参数数.如果声明该块不带参数,则返回0.如果已知该块正好取n个参数,则返回n.如果块具有可选参数,则返回-n-1,其中n是必需参数的数量.没有参数声明的proc与声明||的块相同 作为其论点.