我从PHP切换到Ruby,并且还没有理解一个奇怪的Ruby类行为,其中方法在类方法定义之外执行(参见下面的示例)。在PHP中,当我们想要在类init上执行任何操作时,我们会将它放在构造函数方法中。
Ruby示例(Rails):
class Comment < ActiveRecord::Base
belongs_to :post, :counter_cache => true
end
我是否理解belongs_to
将在实例化时执行?并且belongs_to
是从ActiveRecord继承的类方法吗?
谢谢!
答案 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。