tap法在ruby里的优势是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

我刚读了一篇文章,注意到作者在一个片段中用了tap,类似于:

user = User.new.tap do |u|
  u.username = "foobar"
  u.save!
end

为啥用tap呢?我这么写不也行么?

user = User.new
user.username = "foobar"
user.save!

或者甚至:

user = User.create! username: "foobar"
提问于
用户回答回答于

当你遇到:

user = User.new
user.username = "foobar"
user.save!

他们必须遵循这三行,然后认识到它只是创建一个名为user...

如果是:

user = User.new.tap do |u|
  u.username = "foobar"
  u.save!
end

那就马上就清楚了。读取器不必读取块中的内容就能知道实例user被创造了。

用户回答回答于

另一种使用TAP的方法是在返回对象之前对对象进行操作。

所以不是这样:

def some_method
  ...
  some_object.serialize
  some_object
end

或者:

def some_method
  ...
  some_object.tap{ |o| o.serialize }
end

在某些情况下,这种技术可以节省更多的一行,使代码更加紧凑。

扫码关注云+社区