【问题标题】:<< operator in ruby<< 红宝石中的运算符
【发布时间】:2010-11-09 15:37:22
【问题描述】:

我对 ruby​​ 很陌生,

我在rails中遇到了以下代码,但不知道“

def <<( rate )
  r = Rating.new
  r.rate = rate
  r.rateable = proxy_owner
  ...
  ...
end
class << ActiveRecord::Base
  ...
  ...
end

谁能给我解释一下?

编辑:这里是代码https://github.com/azabaj/acts_as_rateable/blob/master/lib/acts_as_rateable.rb

【问题讨论】:

  • 第一个方法 的默认含义应用于所有类

标签: ruby-on-rails ruby operators


【解决方案1】:

def &lt;&lt;( rating ): 在您的示例中,这用于向可评分模型添加评分。 (例如在acts_as_rateable.rb:41 中),类似于将某些内容附加到字符串(str &lt;&lt; "abc")。由于它在一个模块中,它只会包含在您声明为可评级的模型中。

class &lt;&lt; ClassName:

此块内的所有方法都是静态/类方法(请参阅this blog entry)。 (在这种情况下,所有模型都将具有 Model.example_static_method 方法。)

【讨论】:

  • +1 用于解释第二个问题,我实际上并不知道。我不知道为什么我得到了复选标记,对不起。 :-(
【解决方案2】:

Ruby 中几乎所有的运算符实际上都是在它们前面的对象上调用的实例方法。

&lt;&lt; 有许多不同的用途,具体取决于您调用它的对象类型。例如,在数组中,这可以将给定值推到数组的末尾。

看起来这是针对 Rails 模型对象的,所以在这种情况下,我会说这是在将模型对象附加到模型对象集合时调用的辅助方法。例如,在这种情况下,您可能会将评级附加到产品。

如果您展示了整个方法定义并展示了它所在的类,我可以提供更具体的答案。

【讨论】:

  • 这里是 def github.com/azabaj/acts_as_rateable/blob/master/lib/… 的完整代码
猜你喜欢
  • 2011-08-12
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2011-04-28
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多