ruby - Ruby 中的链接方法,并将 block 注入(inject)链中

标签 ruby

考虑以下 Ruby 表达式:

y=x.a.b.c.d.e.f

当然,x是一个对象,af是为匹配前一个方法的返回值的类定义的方法在链中。现在说我想用自定义 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/

相关文章:

ruby-on-rails - 如何分页与 ruby​​ on rails 的关系?

ruby - 如何缓存用户特定对象

ruby-on-rails - 设计登录时多加一个条件来检查

ruby-on-rails - 如何在 Windows xp 中的 xampp 中部署 ruby​​ on rails 应用程序?

ruby-on-rails - Proc在不同范围内表现不同

javascript - 使用提交按钮将 plan_id 传递到参数中

ruby-on-rails - 从简单的树顶解析器获取日期部分 : wrong argument type Class (expected Module)

java - AES java编码,ruby解码

ruby-on-rails - 如何过滤 Rails 中的对象,以便只有创建它的用户或管理员才能销毁该对象?

html - 使用 ruby​​ 核心库解析 HTML? (即不需要 gem )