Ruby:在init上调用方法

时间:2011-07-23 18:40:46

标签: ruby

我从PHP切换到Ruby,并且还没有理解一个奇怪的Ruby类行为,其中方法在类方法定义之外执行(参见下面的示例)。在PHP中,当我们想要在类init上执行任何操作时,我们会将它放在构造函数方法中。

Ruby示例(Rails):

class Comment < ActiveRecord::Base
  belongs_to :post, :counter_cache => true
end

我是否理解belongs_to将在实例化时执行?并且belongs_to是从ActiveRecord继承的类方法吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

在Ruby中,所有都是可执行代码。或者,换句话说:一切是一个脚本。没有“类声明”之类的东西。

当该文件为load时,执行位于文件中的任何代码,而不是像方法体,类主体,模块主体或块体那样。{或{{1 } d或require d)。这称为脚本主体

创建该类或模块时,将执行位于类或模块体内的任何代码。 (你指的是这种情况。)

枯燥的部分:在调用该方法时执行位于方法体内的任何代码,或者更确切地说,在响应于接收与方法同名的消息而调用该方法时。 (咄。)

当块require_relative被编译为。{/ p>时,执行位于块体内的任何代码

由于类定义只是一个脚本,这意味着它可以包含您想要的任何类型的代码,包括方法调用:

yield

或条件:

class Foo
  attr_accessor :bar # Yes, attr_accessor is just a method like any other
  private # I *bet* you didn't know *that* was a method, too, did you?
end

答案 1 :(得分:1)

是的,它是ActiveRecord的类方法。该方法将在创建类本身时执行,而不是在创建它的实例时执行。

答案 2 :(得分:0)

Yes,这是对的。另请参阅this question