我在互联网上找到了以下代码
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
答案 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
方法