为什么要在自己的前面添加Ruby方法名?

Sun*_*day 2 ruby methods syntax

在查看一些Ruby代码时,我注意到self.在方法名称前加上声明的方法.例如:

def self.someMethod
  //...
end
Run Code Online (Sandbox Code Playgroud)

self.方法名称前面的内容是如何改变方法的?

Gaz*_*ler 10

def self.something 是一个类方法,用:

Class.some_method
Run Code Online (Sandbox Code Playgroud)

def something 是一个实例方法,用:

class = Class.new
class.some_method
Run Code Online (Sandbox Code Playgroud)

区别在于一个在类本身上调用,另一个在类的实例上调用.

要定义类方法,您还可以使用类名,但是由于类名可能会更改,因此将来更难以重构.

一些示例代码:

class Foo
  def self.a
    "a class method"
  end

  def b
    "an instance method"
  end

  def Foo.c
    "another class method"
  end
end

Foo.a # "a class method"
Foo.b # NoMethodError
Foo.c # "another class method"
bar = Foo.new 
bar.a # NoMethodError
bar.b # "an instance method"
bar.c # NoMethodError
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用类名,我编辑了我的答案来展示这个. (2认同)