クラスとクラスの違いは何ですか?
klass
のように、Class
オブジェクトを保持する変数に名前を付けるために一般的に使用されます(クラスもオブジェクトであることを忘れないでください)klass = String
。より深い説明のために、それをどこで見たかのソースを提供できますか?
clazz
はklass
(例えば、本「メタプログラミングRuby」で)よりもむしろ使用します。
クラスとクラスの違いは何ですか?
klass
のように、Class
オブジェクトを保持する変数に名前を付けるために一般的に使用されます(クラスもオブジェクトであることを忘れないでください)klass = String
。より深い説明のために、それをどこで見たかのソースを提供できますか?
clazz
はklass
(例えば、本「メタプログラミングRuby」で)よりもむしろ使用します。
回答:
class
新しいクラスを定義するために使用されるキーワードです。これは予約済みのキーワードであるため、変数名として使用することはできません。Rubyのキーワードを変数名として使用することはできないため、def
or module
、if
or end
、or などの変数を指定することはできませんclass
。違いはありません。
たとえば、次のことを考慮してください。
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
これを実行しようとするclass
と、変数名として使用できないため、エラーが発生します。
test.rb:1: syntax error, unexpected kCLASS, expecting ')'
def show_methods(class)
^
test.rb:2: syntax error, unexpected ')'
puts Object.const_get(class).methods.inspect
修正するには、klass
代わりに識別子を使用します。これは特別なことではありませんが、通常、クラスまたはクラス名を処理するときに変数名として使用されます。音声的には同じですが、予約済みのキーワードではないため、Rubyに問題はありません。
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
予想通り、出力は
["method", "inspect", "name", "public_class_method", "chop!"...
ここでは任意の(予約されていない)変数名を使用できますが、コミュニティはを使用するようになっていklass
ます。特別な魔法はありません。「ここでは「クラス」という名前を使用したかったのですが、予約済みのキーワードなので使用できません」という意味です。
余談ですが、何度か間違って入力したため、Rubyでは大文字と小文字が区別されることに注意してください。大文字で始まるトークンは定数です。つるはし経由:
定数名は大文字で始まり、その後に名前文字が続きます。クラス名とモジュール名は定数であり、定数の命名規則に従います。慣例により、定数変数は通常、全体にわたって大文字とアンダースコアを使用してスペルされます。
したがって、正しいスペルはclass
and klass
ではなくClass
and Klass
です。後者は定数であり、両方のだろうClass
とKlass
、有効な定数の名前ですが、私は明確にするためにそれらを使用しないことをお勧めします。
Class
特に有効な定数名であるだけでなく、現存する名前でもあります!(これはClassクラスです)
klass
ローカル変数としてのの使用はつるはしに由来すると思います-ここで説明した理由から、いくつかの例でその名前を使用しています。
object_instance.class.name == 'Object'
1つはクラスの名前で、もう1つはデフォルトでは未定義の定数です。そして、あなたが見て可能性が高くなりますペアのために、class
そしてklass
後者はちょうど識別子は(文字の他の文字列のような)であるのに対し、前者はクラスを定義するためのキーワードです。「クラス」という言葉を書きたいときに使用しますが、予約済みのキーワードなので使用できません。
class = Kernel.const_get(class_name)
。しかし、あなたは書くことができklass = Kernel.const_get(class_name)
、それは「クラス」を表すために使用されます。
Klass
大文字で始まる識別子は定数であるため、1回しか設定できないため、forを使用するのは適切ではありません。しかし、はい、それは一般的な考えです。