2017-08-24 52 views

回答

4

使用tap

p [1, 2].tap &.each { "foo" } # => [1, 2] 

它产生自我块,然后返回自己。

另一种选择(不推荐)可以创建简单地做每一后返回自己的自定义方法:

class Array 
    def each_with_self 
    each { |x| yield x } 
    self 
    end 
end 

p [1, 2].each_with_self { "foo" } # => [1, 2] 
1

对于你所要求的情况下,它可能是足够用括号中p(..)因为p作为结果返回参数。

p([1, 2]).each{ "foo" } 

p此行为提供用于在表达式的中间做容易检查,即改变foo(bar, baz)foo(p(bar), baz)

至于#each,晶振决定返回nil以改善生成的代码,因为该值大部分时间不使用。这也阻止了在一天结束时产生一些工会。