代码段来自:Adding numbers in succession
我不明白定义方法调用(n)如何使方法add(n)工作。
我也不明白“。”当调用add(1)时。(2)有效。
class Integer
def call(n)
self + n
end
end
def add(n)
n
end
puts add(1)
#=> 1
puts add(1).(2)
#=> 3
puts add(1).(2).(3)
#=> 6
答案 0 :(得分:4)
add
只是身份方法。它的行为不会因引入call
而改变。 call
是在Integer
类上定义的新方法。重新打开这样的内置类通常称为猴子修补,它实际上确实改变了原始类。我们不在这里上新课。
所以实际的内部整数类现在有一个call
方法。 Ruby具有关于call
的特殊语法。将.( ... )
放在.call( ... )
上。所以
add(1).(2)
相当于
add(1).call(2)
但是,add
方法本身就是一种愚蠢的行为。使用call
上定义的Integer
方法,以下所有方法都会产生相同的结果。
add(1).(2).(3)
add(1).call(2).call(3)
1.(2).(3)
1.call(2).call(3)