4

「インスタンスメソッド」、「クラスメソッド」があることは知っていますが、これらのタイプのメソッドは何と呼ばれていますか。

s1 = "This is my STRING!"

def s1.m1
  downcase
end

p s1     # => "This is my STRING!"
p s1.m1   # => "this is my string!"

"string" クラスの s1 "instance" で呼び出される "m1" メソッドはどのタイプのメソッドですか? 私が試してみると、これが可能であることをまったく知らなかったので、それは本当に奇妙です:

s2 = "This is ANOTHER string"
s2.m1 # => Won't work!

どちらが理にかなっていますが、クラスのインスタンスで m1 のようなメソッドを定義することがまったく役立つ理由はわかりません。

4

4 に答える 4

2

それらは object と呼ばれますSingleton Methods

Aexample私はあなたがそれをどこで使うことができるか考えることができます:

特別なロギング クラスがあり、ロギング ファイルをクリーンで整頓したいので、ロギングを 1 つのインスタンスだけに制限する必要があります。

最適な例ではないかもしれませんが、ユース ケースに興味がある場合は、 のユース ケースをSingleton Pattern探してください。そこで答えが見つかるはずです。

于 2013-11-03T15:57:36.700 に答える
1

それらはシングルトン法と呼ばれます。これらを確認する方法は次のとおりです。

s1 = "This is my STRING!"

def s1.m1
  downcase
end

klass= s1.singleton_class # => #<Class:#<String:0x902d4e8>>
klass.instance_methods(false) # => [:m1]
s1.method(:m1).owner # => #<Class:#<String:0x902d4e8>>
s1.singleton_methods # => [:m1]

しかし、クラスのインスタンスで m1 のようなメソッドを定義することがまったく役立つ理由がわかりません。

これらの singleton method( ) は、 の singleton クラス内で定義したように、m1によってのみ呼び出すことができます。ただし、クラスの他のインスタンスによるものではありません。これらは、同じクラスまたは異なるクラスに属しているという事実に関係なく、オブジェクトに固有の動作がある場合に必要です。s1s1String

s2.m1 # => 動かない!

のシングルトン クラス内で定義していないためですs1

于 2013-11-03T16:10:00.657 に答える