プログラミング 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
、一方にはもう一方にはないメソッドがあります。同じこと。
self
inメソッド定義を省略すると、インスタンスメソッドになり、クラス自体ではなく、クラスのインスタンスで使用できるようになります。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"