我正在尝试建立一个将块作为参数的方法。我知道您是通过给最后一个参数加上&前缀来实现的,但是一旦传递了该参数,我应该如何验证呢?
如果要验证参数是否为字符串,则可以使用is_a?(String)
。但是,如何验证我收到的块接受一个参数?还是2?
您可以使用该Proc#arity
方法检查该块接受多少个参数:
def foo(&block)
puts block.arity
end
foo { } # => 0
foo { |a| } # => 1
foo { |a, b| } # => 2
从文档中:
返回将不被忽略的参数数量。如果声明该块不带任何参数,则返回0。如果已知该块正好采用n个参数,则返回n。如果该块具有可选参数,则返回-n-1,其中n是必需参数的数量。没有参数声明的proc与声明||的块相同 作为其论据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句