1. ホーム
  2. ruby

def `self.function` という名前はどういう意味ですか?

2023-08-20 16:37:38

質問

を追加することの意味を説明してくれる人はいますか? self を追加する意味を説明できますか?それは this キーワードに似ていますか?

どのように解決するのですか?

他の言語と異なり、Rubyにはクラスメソッドはありませんが、特定のオブジェクトに付随するシングルトン・メソッドがあります。

cat = String.new("cat")
def cat.speak
    'miaow'
end
cat.speak #=> "miaow" 
cat.singleton_methods #=> ["speak"] 

def cat.speak は、オブジェクトcatにアタッチされたシングルトンメソッドを作成します。

と書くと class A と書くと、次のようになります。 A = Class.new :

A = Class.new
def A.speak
    "I'm class A"
end
A.speak #=> "I'm class A" 
A.singleton_methods #=> ["speak"] 

def A.speak はオブジェクトAに付属するシングルトン・メソッドを作成します。これをクラスAのクラス・メソッドと呼びます。

と書くと

class A
    def self.c_method
        'in A#c_method'
    end
end

のインスタンスを作成し Class (*). クラス定義の内部で、Ruby は self をこの新しい Class のインスタンスに設定し、定数 A に代入しています。 def self.c_method は次のように等価です。 def cat.speak と同じです。つまり、現在クラスAであるオブジェクトselfにアタッチされるシングルトン・メソッドを定義しています。

ここで、クラスAは一般にクラスメソッドと呼ばれる2つのシングルトンメソッドを持っています。

A.singleton_methods
 => ["c_method", "speak"] 

(*) 技術的には、この場合 A が既に作成されており A = Class.new , class A は既存のクラスを再開します。そのため、最後に2つのシングルトン・メソッドを用意しているのです。しかし、それがクラスの最初の定義である通常のケースでは、それはつまり Class.new .