クラスとクラスの違いは何ですか?
class
は、新しいクラスを定義するために使用されるキーワードです。予約キーワードなので、変数名として使用することはできません。 Rubyのキーワードは変数名として使用できないため、def
またはmodule
またはif
またはend
などの名前の変数を持つことはできません- 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では大文字と小文字が区別されることに注意する価値があります。大文字で始まるトークンは定数です。 Pickaxe を介して:
定数名は、大文字で始まり、名前の文字が続きます。クラス名とモジュール名は定数であり、定数の命名規則に従います。慣例により、定数変数は通常、全体を通して大文字と下線を使用して綴られます。
したがって、正しいスペルはclass
およびklass
ではなく、Class
およびKlass
です。後者は定数であり、Class
とKlass
は両方とも有効な定数名ですが、わかりやすくするために使用しないことをお勧めします。
klass
は、Rails(またはActiveRecord) method です。関連付けのクラスを取得するために使用されます。
リンクされたコンテンツで述べられているように:
class Author < ActiveRecord::Base
has_many :books
end
Author.reflect_on_association(:books).klass
# => Book
klass
およびclazz
およびclasz
などは、予約語class
を回避するために使用される創造的なミススペルです。
class1
またはcl
またはclassX
または意図的なスペルミスではなく何か。
1つはクラスの名前で、もう1つはデフォルトでは未定義の定数です。 class
とklass
のペアの場合、前者はクラスを定義するためのキーワードであり、後者は単なる識別子です(他の文字列と同様)。 Wordの「クラス」を書きたいときに使用しますが、予約キーワードであるため使用できません。