1

プログラミング Ruby で、クラス メソッドが次のように定義されているのを見ました。

class File
  def self.my_open(*args)
  #...
  end
end

接頭辞「自己」は何をしますか。ここって意味?

4

2 に答える 2

3

構文を使用して、特定のオブジェクト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)

FooBarは両方ともクラスのインスタンス(オブジェクト)ですが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"
于 2013-03-21T18:03:15.570 に答える