Add方法如何工作?

时间:2018-02-03 05:34:58

标签: ruby

代码段来自: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

1 个答案:

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