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
.
関連
-
[解決済み] Rubyのダブルコロン `::` とは何ですか?
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] w(array)とはどういう意味ですか?
-
[解決済み] Rubyのmap(&:name)ってどういう意味?
-
[解決済み] Rubyで||= (or-equals)はどういう意味ですか?
-
[解決済み】Ruby: Gemfileの「require: false」はどういう意味ですか?
-
[解決済み】「WARN Could not determine content-length of response body.」の意味と対処方法について教えてください。
-
[解決済み】Rubyの__FILE__の意味は何ですか?
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
-
[解決済み] Ruby 配列を関数の引数に変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyオプションのパラメータ
-
[解決済み] 今月の名前(Date.today.monthをnameに変換)。
-
[解決済み] ルビー 負の数を正の数に変換する?
-
[解決済み] Ruby の文字列から最後の n 文字を抽出する。
-
[解決済み] ランダムなブール値を返す最良の方法
-
[解決済み] Rubyでオブジェクトのキーを配列として取得する
-
[解決済み] 変数名を使ったRubyの正規表現
-
[解決済み] Ruby の正規表現で最初にマッチしたものを返す
-
[解決済み] Rubyでディレクトリを再帰的にリストアップするためのワンライナー?
-
[解決済み] バージョン要件におけるティルデグレータン(~>)の意味?