Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:在init上调用方法_Ruby - Fatal编程技术网

Ruby:在init上调用方法

Ruby:在init上调用方法,ruby,Ruby,我从PHP切换到Ruby,但还不了解Ruby类的一种奇怪行为,即在类方法定义之外执行方法(参见下面的示例)。在PHP中,当我们想要在类init上执行任何操作时,我们会将其放入构造函数方法中 Ruby示例(Rails): class注释true 结束 我对所属的将在实例化时执行的理解正确吗?是否属于继承自ActiveRecord的类方法 谢谢 ,没错。另请参见。,这是正确的。另请参见。是的,它是ActiveRecord中的类方法。该方法将在创建类本身时执行,而不是在创建其实例时执行 是的,它是A

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

Ruby示例(Rails):

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