考虑以下 Ruby 表达式:
y=x.a.b.c.d.e.f
当然,x
是一个对象,a
到f
是为匹配前一个方法的返回值的类定义的方法在链中。现在说我想用自定义 block 替换方法 c
的调用,即我想实现的效果
temp=x.a.b
temp1=.... (calculate something based on the value of temp)
y=temp1.d.e.f
但使用方法链。
定义一个合适的方法来实现这一点当然是微不足道的:
class Object
def pass
yield(self)
end
end
这样我就可以写出类似的东西
y=x.a.b.pass {|the_b| .....}.d.e.f
现在回答我的问题:
鉴于Ruby 已经有一个类似问题的方法(Object#tap),我想知道为什么它没有类似于我刚才解释的Object#pass 的方法。我怀疑,要么
(a) Ruby 已经提供了这样的功能,我只是太笨才发现它,或者
(b) 我想要实现的目标会被认为是糟糕的编程风格(但是,为什么?)
(a) 或 (b) 是正确的,还是我错过了什么?
最佳答案
(a) 是的。 Ruby 已经有了。它称为 yield_self
。
(b) 不,这不是一种糟糕的风格。
关于ruby - Ruby 中的链接方法,并将 block 注入(inject)链中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49532148/