0

RoR中有以下代码:

class Product < ActiveRecord::Base
  validates :title, :description, :image_url, presence: true
end

我读过一些 Ruby 书籍,但在 OOP 段落中没有看到任何关于在类(不是其他方法)主体中执行类方法的信息!它是什么?它是如何工作的?这个方法什么时候执行?请在这个问题上让我清楚。谢谢。

4

1 回答 1

2

方法在被调用时被执行。在类体的上下文中,self成为该类。self作为接收者可以省略,所以validates这里与Product.validates ...or相同self.validates ...validates是 上的类方法Active::Base,在类定义期间被调用。


在我的理解中,self隐式接收器的含义不同,具体取决于它所在的位置。

module Foo
  # module body
  def # method name
    # method body
  end
end
  1. 在模块主体中
    • self: 模块
    • 隐式接收器:模块
  2. 在方法名称中
    • self: 模块
    • 隐式接收者:类的一个实例
  3. 在方法体中
    • self: 方法名中的接收者
    • 隐式接收者:方法名中的接收者
于 2013-07-20T06:49:14.580 回答