为什么在这里使用tap方法?

时间:2015-12-27 15:09:14

标签: ruby-on-rails ruby

在以下Rails代码中,

root.join('lib', 'assets', 'bower_components').to_s.tap do |bower_path|
  config.sass.load_paths << bower_path
  config.assets.paths << bower_path
end

我想知道为什么我们需要点击这里

为什么不使用

bower_path = root.join('lib', 'assets', 'bower_components').to_s
config.sass.load_paths << bower_path
config.assets.paths << bower_path

使用tap有​​什么好处?

2 个答案:

答案 0 :(得分:6)

一个好处可能是tap返回调用它的对象。您的第二个版本与tap版本不完全相同。它与:

相同
bower_path = root.join('lib', 'assets', 'bower_components').to_s
config.sass.load_paths << bower_path
config.assets.paths << bower_path
bower_path

如果需要此功能,则取决于上下文。

答案 1 :(得分:1)

在你的情况下,我没有看到任何好处。

Inside tap

VALUE
rb_obj_tap(VALUE obj)
{
    rb_yield(obj);
    return obj;
}

可用于:

  • 将副作用分组在一起
  • 链/管道功能
  • 减少中间变量的使用
  • 更容易使用嵌套哈希

总结一下,更多&#34;功能性&#34;风格