インスタンスメソッドを定義するためのショートカット?
概要
Rubyにはクラスメソッドを定義するためのショートカットがあります
def String.some
true
end
p String.some
インスタンスメソッドを定義するための同様のショートカットはありますか?
def <???>.some
true
end
p "".some
追伸また、そのショートカット構文に関するドキュメントへのリンクについても言及していただけますか。
解決策
それはクラスメソッドではありません。 Rubyにはクラスメソッドがありません。これは、定義されているオブジェクトがたまたま Class クラスのインスタンスであることを除けば、単なる通常のシングルトン メソッドです。 「クラス クラスのインスタンスであるオブジェクトのシングルトン メソッド」を指すために単に「クラス メソッド」という用語を使用します。その方が短いためです。しかし、Ruby プログラミング言語には、そのようなものはありません。クラスメソッド。
また、オブジェクトが Class クラスのインスタンスでなければならない理由はありません。(フリーズまたは即時でない限り) (ほぼ) あらゆるオブジェクトにすることができます。
some_obj = Object.new
def some_obj.foo = :bar
some_obj.foo
#=> :bar
ただし…上で嘘をつきました。 Rubyにはシングルトンメソッドもありません。これは、some_obj のシングルトン クラスのインスタンス メソッドにすぎません。 「シングルトン クラスのインスタンス メソッド」を指すために単に「シングルトン メソッド」という用語を使用します。これは、その方が短いためです。しかし、Ruby プログラミング言語には、シングルトン メソッドのようなものはありません。 (コア ライブラリにはシングルトン メソッドについて説明するメソッドがいくつかありますが、それらはすべてシングルトン クラスのインスタンス メソッドで動作するだけです。繰り返しますが、それらについて説明するのは便利ですが、基本的には存在しません。)
同様に、「クラス クラスのインスタンスであるオブジェクトのシングルトン クラスのインスタンス メソッド」と言ったほうが簡単なので、「クラス メソッド」について説明しますが、基本的にクラス メソッドは存在しません。
上で書いたものはインスタンス メソッドを定義しています。 some は String のシングルトン クラスのインスタンス メソッドです。
String.singleton_class.instance_methods(false)
#=> [:try_convert, :some]