3

文字列が予約語かどうかを判断するために Ruby に組み込まれているものはありますか? みたいな"next".is_keyword?

4

4 に答える 4

3

私が考えることができる唯一の方法は、あなたが知っているすべてのキーワードを配列にロードすることです。

class String
  def is_keyword?
    %w{__FILE__ __LINE__ alias and begin BEGIN break case class def defined? do else elsif end END ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield}.include? self
  end
end
"foobar".is_keyword? # => false
"for".is_keyword? # => true

参考のため:

  • これが組み込みの方法ではないことはわかっています。これが私が考えることができる唯一の方法です。私に反対票を投じないでください。
  • 私が含めたリストは、真のキーワードのリストです。publicprotectedおよび friends は実際にはキーワードではなく、モジュールまたはクラスの作成中に呼び出される重要なメソッドの名前にすぎません。これは、Ruby DSL の要素と考えることができます。
于 2011-06-23T23:09:13.043 に答える
1

私の知る限りprotected、予約語ではありません。重要なメソッドの名前にすぎません。

http://wiki.rubyonrails.org/rails/pages/reservedwordsには、使用できない予約語 (Rails またはその依存関係を使用している場合にのみ適用されるものもあります) と、問題を引き起こす可能性のあるメソッド名がリストされています。

これがあなたの質問に完全に答えない場合は、メソッド名または変数名に興味があるかどうか、およびまったく使用できない単語または他の原因となる可能性のある単語について心配しているかどうかをより完全に定義できますか?物事がうまくいかない?

于 2011-06-23T23:27:20.553 に答える
1

Ruby gem ruby​​keywordを使用します。キーワードを特定するだけではありません。string.keyword?キーワードかどうかを示します。string.defineキーワードの定義を示します。もありstring.exampleます。

于 2012-03-21T09:59:41.583 に答える
0

「保護された」と呼ばれるメソッドを実装したいクラスがある場合、そのメソッドを定義する前に、そのクラスのインスタンスを作成して呼び出します

インスタンスメソッド

これにより、クラスに継承されたすべてのメソッドが表示されます。「保護」があれば、それは ruby​​ によって予約されています。

于 2011-06-23T22:32:07.173 に答える