プログラミング Ruby で、クラス メソッドが次のように定義されているのを見ました。
class File
  def self.my_open(*args)
  #...
  end
end
接頭辞「自己」は何をしますか。ここって意味?
プログラミング Ruby で、クラス メソッドが次のように定義されているのを見ました。
class File
  def self.my_open(*args)
  #...
  end
end
接頭辞「自己」は何をしますか。ここって意味?
構文を使用して、特定のオブジェクトdef receiver.methodにメソッドを定義できます。    
class Dog
  def bark
    puts 'woof'
  end
end
normal_dog = Dog.new
angry_dog = Dog.new
def angry_dog.bite
  puts "yum"
end
normal_dog.class # => Dog
angry_dog.class # => Dog
angry_dog.bite # >> yum
normal_dog.bite # ~> -:15:in `<main>': undefined method `bite' for #<Dog:0x007f9a93064cf0> (NoMethodError)
犬は同じクラスですがDog、そのうちの1匹には、他の犬にはない独自の方法があることに注意してください。
クラスでも同じです。クラス定義内で、selfそのクラスを指します。これは理解するために重要です。
class Foo
  self # => Foo
end
次に、これら2つのクラスを見てみましょう。
class Foo
  def self.hello
    "hello from Foo"
  end
end
class Bar
end
Foo.class # => Class
Bar.class # => Class
Foo.hello # => "hello from Foo"
Bar.hello # ~> -:15:in `<main>': undefined method `hello' for Bar:Class (NoMethodError)
FooとBarは両方ともクラスのインスタンス(オブジェクト)ですがClass、一方にはもう一方にはないメソッドがあります。同じこと。
selfinメソッド定義を省略すると、インスタンスメソッドになり、クラス自体ではなく、クラスのインスタンスで使用できるようになります。Dog#bark最初のスニペットの定義を参照してください。
最後に、クラスインスタンスメソッドを定義する方法について、さらにいくつかのメソッドを示します。
class Foo
  def self.hello1
    "hello1"
  end
  def Foo.hello2
    "hello2"
  end
end
def Foo.hello3
  "hello3"
end
Foo.hello1 # => "hello1"
Foo.hello2 # => "hello2"
Foo.hello3 # => "hello3"