-3

下面的代码来自评论控制器。第 3 行中的“哦”在做什么?

@offer = Offer.find(params[:offer_id])
@offer_comment = @offer.offer_comments.build(params[:offer_comment])
@offer_comment.commenter oh = current_user
@offer_comment.save!
Notify::offer_comment_create(@offer_comment)
@offer.update_attribute(:read, false) if @offer.read? and current_user == @offer.offerer
4

3 回答 3

8

Ruby 会将该行视为:

@offer_comment.commenter(oh = current_user)

所以它将分配current_useroh并作为它的参数commenter接收。current_user

于 2013-04-25T10:58:41.530 回答
2

它正在创建一个名为的新局部变量oh并将结果分配current_user给它。但是,该变量从未在其他任何地方使用过,因此它基本上是无操作的。

于 2013-04-25T10:57:14.243 回答
1

Ruby 允许方法不带括号,但我个人正是因为这种情况才使用它们。虽然 Ruby 通常可以根据其优先规则的顺序对其进行排序和理解,但它仍然可能是一个维护和支持问题。

我们人类更难阅读,特别是如果我们一直跳进跳出不同的语言,并且这些语言对方法参数使用不同的规则。对这个问题的不同答案证明了这一点,因为该陈述的含义难以辨别。(其中一个答案已被删除,但我们这些排名足够高的人仍然可以看到它。)

我已经编程了很长时间,尽管 Ruby 风格指南有不同的说法,但我几乎一直使用括号,并且在我们的团队中坚持使用它。在调试时,这些括号可能是快速找到错误或花费数小时找到它的区别。

于 2013-04-25T13:05:46.767 回答