2

我注意到我正在编写的代码send经常使用,但我并不完全理解它。使用它而不是不使事情复杂化并且不使用它有什么好处?

一个例子:

  def star_ratings_count(rating)
    self.send("#{rating}_ratings".to_sym).star.count
  end

  def update_star_ratings_count
    self.ratings_count = star_ratings_count(:criteria_one_rating)
  end
4

1 回答 1

8

可能有很多情况下使用send是可取的。其中一些(我自己遇到的)在下面

  1. 当您不知道真正的方法名称时。就像你的例子一样。
  2. send你可以调用私有或受保护的方法。因此,您可以使用它从外部测试模型测试这些方法。
  3. 当您想在循环中调用方法时。像这样的东西

    [:method1, :method2].each { |method| object.send(method) }

于 2012-09-12T22:38:54.907 回答