Ruby中在方法之前调用方法?

Ruby中在方法之前调用方法?,ruby,Ruby,我是Ruby新手,我看到的方法定义如下: def method_one puts "method 1" end class MyClass method_one def method_two puts "method 2" end end method\u one的使用方式让我想起了Python装饰器 c = MyClass.new c.method_two c = MyClass.new c.method_two 是 方法

我是Ruby新手,我看到的方法定义如下:

def method_one
  puts "method 1"
end

class MyClass
  method_one
  def method_two
    puts "method 2"
  end
end
method\u one
的使用方式让我想起了Python装饰器

c = MyClass.new
c.method_two
c = MyClass.new
c.method_two

方法1

方法2

我一直试图在web上的Ruby文档中搜索关于这个语法/语言特性的更多信息,但我不知道要搜索什么关键字


这叫什么?

我觉得你有点误导;输出:

#
“方法2”
在类被加载之前,或者如果您在IRB中,则输入最后一个end语句,您将不会看到方法1


我建议研究一下ruby的initialize方法。

我认为你有点误导;输出:

#
“方法2”
在类被加载之前,或者如果您在IRB中,则输入最后一个end语句,您将不会看到方法1


我建议研究一下ruby的initialize方法。

我认为你有点误导;输出:

#
“方法2”
在类被加载之前,或者如果您在IRB中,则输入最后一个end语句,您将不会看到方法1


我建议研究一下ruby的initialize方法。

我认为你有点误导;输出:

#
“方法2”
在类被加载之前,或者如果您在IRB中,则输入最后一个end语句,您将不会看到方法1

我建议研究ruby的初始化方法。

TL;博士 这段代码并不像你想象的那样。不要做这种事

Ruby的顶级对象 Ruby允许您在类之外定义方法。这些方法存在于顶级对象上,您可以(通常)将其视为一种“包罗万象”命名空间。你可以看到各种各样的帖子,比如更多的细节,但你真的不需要在意

在您最初的帖子中,method_one只是顶层中定义的一个方法。因此,它可用于嵌套在顶级中的类和方法,例如MyClass

类中的方法 不管您怎么想,以下内容实际上并没有在MyClass上声明:方法\一个类或实例方法:

class MyClass
  method_one
  def method_two; end
end
相反,Ruby在类的定义过程中调用了顶级的
::method\u one
,但它从来不会成为类方法(例如
MyClass::method\u one
)或实例方法(例如
MyClass.new.method\u one
)。可能有一些这样做的用例(例如打印调试信息、测试注入等),但这很容易混淆,容易出错,通常是要避免的,除非您有一个非常强大的用例

更好的选择 通常,当您在学术课之外看到类似的内容时,程序员可能打算执行以下操作之一:

  • 扩展一个类
  • 将单例方法添加到类中
  • 在类中包含模块
  • 在类定义期间设置闭包
  • 最后一个问题涉及元编程的模糊领域,此时您可能需要更新类初始值设定项,或者传递Proc或lambda对象。Ruby可以让你做各种奇怪和奇妙的事情,但这并不意味着你应该这样做。

    TL;博士 这段代码并不像你想象的那样。不要做这种事

    Ruby的顶级对象 Ruby允许您在类之外定义方法。这些方法存在于顶级对象上,您可以(通常)将其视为一种“包罗万象”命名空间。你可以看到各种各样的帖子,比如更多的细节,但你真的不需要在意

    在您最初的帖子中,method_one只是顶层中定义的一个方法。因此,它可用于嵌套在顶级中的类和方法,例如MyClass

    类中的方法 不管您怎么想,以下内容实际上并没有在MyClass上声明:方法\一个类或实例方法:

    class MyClass
      method_one
      def method_two; end
    end
    
    相反,Ruby在类的定义过程中调用了顶级的
    ::method\u one
    ,但它从来不会成为类方法(例如
    MyClass::method\u one
    )或实例方法(例如
    MyClass.new.method\u one
    )。可能有一些这样做的用例(例如打印调试信息、测试注入等),但这很容易混淆,容易出错,通常是要避免的,除非您有一个非常强大的用例

    更好的选择 通常,当您在学术课之外看到类似的内容时,程序员可能打算执行以下操作之一:

  • 扩展一个类
  • 将单例方法添加到类中
  • 在类中包含模块
  • 在类定义期间设置闭包
  • 最后一个问题涉及元编程的模糊领域,此时您可能需要更新类初始值设定项,或者传递Proc或lambda对象。Ruby可以让你做各种奇怪和奇妙的事情,但这并不意味着你应该这样做。

    TL;博士 这段代码并不像你想象的那样。不要做这种事

    Ruby的顶级对象 Ruby允许您在类之外定义方法。这些方法存在于顶级对象上,您可以(通常)将其视为一种“包罗万象”命名空间。你可以看到各种各样的帖子,比如更多的细节,但你真的不需要在意

    在您最初的帖子中,method_one只是顶层中定义的一个方法。因此,它可用于嵌套在顶级中的类和方法,例如MyClass

    类中的方法 不管您怎么想,以下内容实际上并没有在MyClass上声明:方法\一个类或实例方法:

    class MyClass
      method_one
      def method_two; end
    end
    
    相反,Ruby在类的定义过程中调用了顶级的
    ::method\u one
    ,但它从来不会成为类方法(例如
    MyClass::method\u one
    )或实例方法(例如
    MyClass.new.method\u one
    )。执行此操作可能有一些用例(例如,打印调试信息,t