1. ホーム
  2. ruby

[解決済み] rubyのClassとKlassの違いは何ですか?

2022-09-02 05:58:47

質問

ClassとKlassの違いは何ですか?

どのように解決するのですか?

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 . これは特別な魔法があるわけではなく、単に「'class' という名前をここで使いたかったのですが、予約キーワードなので使えません」という意味です" 。

余談ですが、あなたは何度か打ち間違えているので、Ruby では大文字と小文字が重要であることを指摘しておきます。大文字で始まるトークンは定数です。を経由して ツルハシ :

<ブロッククオート

定数名は大文字で始まり、その後に名前文字が続きます。クラス名とモジュール名は定数であり、定数の命名規則に従います。慣習上、定数変数は通常大文字とアンダースコアを使って全体的に綴られます。

したがって、正しい表記は class であり klass よりも、むしろ ClassKlass . 後者は定数となり ClassKlass は有効な定数名ですが、わかりやすくするために使用しないことをお勧めします。