Ruby:在init上调用方法
我从PHP切换到Ruby,但还不了解Ruby类的一种奇怪行为,即在类方法定义之外执行方法(参见下面的示例)。在PHP中,当我们想要在类init上执行任何操作时,我们会将其放入构造函数方法中 Ruby示例(Rails):Ruby:在init上调用方法,ruby,Ruby,我从PHP切换到Ruby,但还不了解Ruby类的一种奇怪行为,即在类方法定义之外执行方法(参见下面的示例)。在PHP中,当我们想要在类init上执行任何操作时,我们会将其放入构造函数方法中 Ruby示例(Rails): class注释true 结束 我对所属的将在实例化时执行的理解正确吗?是否属于继承自ActiveRecord的类方法 谢谢 ,没错。另请参见。,这是正确的。另请参见。是的,它是ActiveRecord中的类方法。该方法将在创建类本身时执行,而不是在创建其实例时执行 是的,它是A
class注释true
结束
我对所属的将在实例化时执行的理解正确吗?是否属于继承自ActiveRecord的类方法
谢谢 ,没错。另请参见。,这是正确的。另请参见。是的,它是ActiveRecord中的类方法。该方法将在创建类本身时执行,而不是在创建其实例时执行 是的,它是ActiveRecord中的类方法。该方法将在创建类本身时执行,而不是在创建其实例时执行 在Ruby中,一切都是可执行代码。或者,换一种说法:一切都是一个脚本。没有“类声明”之类的东西
当文件load
ed(或require
d或require\u relative
d)时,执行位于文件中的任何代码,而不在任何其他内容(如方法体、类体、模块体或块体)中。这称为脚本体
任何位于类或模块主体内的代码都会在创建该类或模块时执行。(您所指的就是这种情况。)
令人厌烦的部分:当调用方法时,或者更准确地说,当调用该方法以响应接收到与该方法同名的消息时,会执行位于方法体中的任何代码。(嗯。)
当块体yield
ed到时,执行位于块体内部的任何代码
由于类定义只是一个脚本,这意味着它可以包含您想要的任何类型的代码,包括方法调用:
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
或条件:
class Bar
if blah # e.g. check if the OS is Windows
def foo
# one way
end
else
def foo
# a different way
end
end
end
在Ruby中,一切都是可执行代码。或者,换一种说法:一切都是一个脚本。没有“类声明”之类的东西
当文件load
ed(或require
d或require\u relative
d)时,执行位于文件中的任何代码,而不在任何其他内容(如方法体、类体、模块体或块体)中。这称为脚本体
任何位于类或模块主体内的代码都会在创建该类或模块时执行。(您所指的就是这种情况。)
令人厌烦的部分:当调用方法时,或者更准确地说,当调用该方法以响应接收到与该方法同名的消息时,会执行位于方法体中的任何代码。(嗯。)
当块体yield
ed到时,执行位于块体内部的任何代码
由于类定义只是一个脚本,这意味着它可以包含您想要的任何类型的代码,包括方法调用:
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
或条件:
class Bar
if blah # e.g. check if the OS is Windows
def foo
# one way
end
else
def foo
# a different way
end
end
end