Ruby代码说明

时间:2018-02-10 09:13:29

标签: ruby

我在互联网上找到了以下代码

class Test
  def value
    'string'
  end

  def inspect
    'value'
  end
end

def test(arg)
  arg.tap { |i| i.value }
end

p test(Test.new)

有人可以解释为什么会返回

p test(Test.new) 
# >> value

2 个答案:

答案 0 :(得分:1)

由于arg.tap本身会返回arg,而p会打印arg.inspect,因为您已覆盖inspect的{​​{1}}方法,它会返回字符串Test,因此打印结果为 value

另见:
- p vs puts in Ruby
  - tap method

答案 1 :(得分:1)

点击用于方法链。它运行传递的阻塞并返回输入而不做任何更改。

这意味着

arg.tap { |i| i.value }将返回arg

p方法运行传递对象的inspect方法