self
をメソッド定義に追加することの重要性は誰にも分かりますか?それはjavaのthis
キーワードに似ていますか?def `self.function`という名前は何を意味しますか?
答えて
他の言語とは逆に、Rubyにはクラスメソッドはありませんが、特定のオブジェクトにシングルトンメソッドが付属しています。
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
あなたはクラス(*)のインスタンスを作成します。クラス定義の中で、Rubyは、クラスAのこの新しいインスタンスに自己を設定します。これは、定数Aに割り当てられています。def self.c_method
は、def cat.speak
に相当します。つまり、オブジェクトselfに付加されたシングルトンメソッドを定義します。
クラスAには2つのシングルトンメソッドがあり、これは通常クラスメソッドを呼び出します。
A.singleton_methods
=> ["c_method", "speak"]
(*)技術、Aは既にA = Class.newによって作成されています。この場合、class A
は、既存のクラスを再オープン。そのため、最後に2つのシングルトンメソッドがあります。しかし、それがクラスの最初の定義である通常の場合、Class.newを意味します。
メソッドを宣言するとき、宣言のself
は宣言するクラス/モジュールです。したがって、実質的にクラスメソッドを定義しています。これはjavaのstatic
メソッドのようなものです。インスタンスの代わりにクラスのメソッドを呼び出すとします。MyClass.method
Hereクラスとインスタンスのメソッドについては、さらに詳しい情報があります。
EDIT:self
キーワードは、Javaでthis
キーワードに類似であるが、クラスメソッド宣言にself
を使用する効果は、Javaでstatic
キーワードを使用しての効果と同様です。類似点は、RubyのクラスメソッドのようなJavaの静的メソッドは、クラスのインスタンスの代わりにクラスオブジェクトiselfを使ってアクセスされるという点です。
static
はダイナミックの反対側を表していません。このキーワードの名前の選択は疑わしい(おそらくCから継承されている)ので、その意味をよりよく反映するためにperClass
などと呼ばれていたはずです。技術的な意味はすべてのstatic
メンバーがクラスローダーごとに1回だけ存在することです。
「静的」のように*何もありません。特に、これらのメソッドは動的であり、静的ではありません。 –
@JörgWMittag:少なくとも1つの意味でJavaの「静的」に似ています。インスタンスレベルではなくクラスレベルに適用されます。 –
@JörgWMittag -
ルビーの自己では、javaではthis
と多少似ていますが、クラスになるとjavaのキーワードstatic
によく似ています。短い例:
class A
# class method
def self.c_method
true
end
# instance method
def i_method
true
end
end
A.c_method #=> true
A.i_method #=> failure
A.new.i_method #=> true
A.new.c_method #=> failure
を更新:A):Javaでルビー
内のJavaクラスのメソッドの静的メソッドの違い静的メソッドがインスタンスメソッドからそれらが違う二つの異なる特徴を有しますそれらは静的であり、b)インスタンスに関連付けられていない。 Rubyでは、すべてのメソッドは動的であり、すべてのメソッドはインスタンスに関連付けられています。実際、3つの異なる「メソッド」(インスタンスメソッド、静的メソッド、およびコンストラクタ)があるJavaとは異なり、Ruby:インスタンスメソッドには1種類のメソッドしかありません。したがって、いいえ:Javaの静的メソッドは、Rubyのメソッドとはまったく異なります。 - JörgW Mittag 1時間前
'static 'のように*何もありません。特に、これらのメソッドは動的であり、静的ではありません。 –
Rubyで 'self#method'と 'class#method'を定義すると' class JavaClass;のようになります。 public static void method ... 'in Java – krichard
Javaの静的メソッドには、インスタンスメソッドと異なる2つの異なる機能があります。a)静的であり、b)インスタンスに関連付けられていません。 Rubyでは、* all *メソッドは動的で、* all *メソッドはインスタンスに関連付けられています(IOW:実際にはメソッド*に似ていません。実際、3つの異なる種類のメソッド(インスタンスメソッド、静的メソッド、コンストラクタ)があるJavaとは異なり、Rubyのインスタンスメソッドには* 1種類のメソッドしかありません。したがって、いいえ:Javaの静的メソッドは、Rubyのメソッドとはまったく異なります。 –
- 1. defメソッド(parameter = None)とはどういう意味ですか?
- 2. WPF/C#の名前比較は何を意味しますか?
- 3. 関数名の前にアスタリスクは何を意味しますか?
- 4. ディレクトリ名とは何ですか? 'と '..'という意味で、faDirectoryはどういう意味ですか?
- 5. メソッド宣言のパラメータ名の前に '@' charとは何を意味しますか?
- 6. m4マクロプロセッサでは、「m4」という名前は何を意味していますか?
- 7. @TypeConverterAnnotationというコードは何を意味していますか?
- 8. Javascriptでは ":"というシンボルは何を意味しますか?
- 9. Rubyでは "$$"というトークンは何を意味しますか?
- 10. 「テンプレート」という用語は何を意味しますか?
- 11. レガシーデータベースという用語は何を意味しますか?
- 12. 「メタデータ」という用語は何を意味しますか?
- 13. 「BODMAS」という用語は何を意味しますか?
- 14. 「データベースシーディング」という用語は何を意味しますか?
- 15. フラットは何を意味しますか?
- 16. struct変数の名前の意味は何ですか?
- 17. VkFormatの名前でPACK8/16/32の意味は何ですか?
- 18. Android NetworkInterface。 NetworkInterfaceの名前の意味は何ですか?
- 19. メソッド名の前にこのconstは何を意味しますか?
- 20. 感嘆符は機能の名前の後に何を意味しますか?
- 21. CNTはストアドプロシージャの名前付けに何を意味しますか?
- 22. キーワードacmeはハイパージャーコンポーザーの名前空間で何を意味しますか?
- 23. 0x0Fは何を意味していますか?そして、このコードはどういう意味ですか?
- 24. 新しいLinuxカーネルのフラッシュプロセスの名前の意味は何ですか?
- 25. 意味論は何を意味しますか?
- 26. メソッドの前にjavascriptは何を意味しますか?
- 27. 機能の前に[&]は何を意味しますか?
- 28. "&"はPHPのクラスの前で何を意味しますか?
- 29. exit(0)とexit(1)という意味は何ですか?
- 30. 「+ =」(プラスは等しい)とは何を意味しますか?
これは正解です。経験豊富なRubyistsは、 "クラスオブジェクトのシングルトンクラスのインスタンスメソッド"を意味するのに "クラスメソッド"という用語を使用することもありますが、そのクラスメソッドのようなものは存在しませんルビー。実際、シングルトンメソッドは単なるオブジェクトのシングルトンクラスで定義される通常のメソッドです)。しかし、OPは明らかに経験豊富なRubyistではありません。それゆえ、彼を混乱させて短くするのは良い考えではありません。いいぞ! –