内置方式来确定字符串是否是Ruby保留字?

时间:2011-06-23 22:21:41

标签: ruby string keyword reserved-words built-in

是否内置了Ruby以确定字符串是否为保留字?像"next".is_keyword?

这样的东西

4 个答案:

答案 0 :(得分: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和朋友不是真正的关键字,只是在创建模块或类时调用的重要方法的名称。您可以将其视为Ruby DSL的元素。

答案 1 :(得分:1)

据我所知,protected并非真正的保留字。这只是一个重要方法的名称。

http://wiki.rubyonrails.org/rails/pages/reservedwords列出了您不能使用的保留字(其中一些仅在您使用Rails或其依赖项时适用),以及可能导致问题的方法名称。

如果这还没有完全回答你的问题,你能否更全面地定义你是否对方法名称或变量名称感兴趣,以及你是否担心根本无法使用的词语,或者是可能会导致其他事情出错?

答案 2 :(得分:0)

如果你有一个想要实现名为“protected”的方法的类,那么在定义该方法之前,先创建该类的实例并调用

  

instance.methods

这将显示为该类继承的所有方法,如果存在“protected”,则由ruby保留。

答案 3 :(得分:0)

使用Ruby gem rubykeyword。它不仅仅是识别关键字。 string.keyword?会告诉您是否有关键字。 string.define给出了关键字的定义。还有string.example