2013-06-13 50 views

回答

4

注意的事实是,在红宝石,MethodProc是两回事。

对于Proc#arity,返回的数字是通过调用proc不会被忽略的参数数量。
对于您声明的第一个proc,它只需要一个参数,因此它的参数为1. 对于第二个proc,它只有一个参数是可选的,因此它根本不期待参数,所以它是0

对于Method#arity,返回的数字是该方法接受的参数个数。
你的方法实际上需要一个可变数量的参数,即0..1,因此arity预计会返回一个负数,这里是-1,因为有0个必需的参数,并且公式为-n-1(n是所需参数的数量)。

请注意,Proc#arity的文档具有误导性,因为它提到了与Method#arity相同的公式,但事实并非如此。

lambda表达式的情况下,也很有趣,因为:

lambda {|x=1|}.arity  # => -1 

它就像一个Method

+0

实际上'lambda's是'proc's。所以...... –

+0

@JanDvorak令人困惑的是'proc'和'Proc'意味着不同的东西。 – sawa

+0

@sawa抱歉;我的意思是“实际上'lambda's是'Proc's。所以...” –

相关问题