Встроенный способ определить, является ли строка зарезервированным словом Ruby? - PullRequest
3 голосов
/ 24 июня 2011

Есть ли что-то встроенное в Ruby, чтобы определить, является ли строка зарезервированным словом?Что-то вроде "next".is_keyword??

Ответы [ 4 ]

3 голосов
/ 24 июня 2011

Я могу думать только о том, чтобы загрузить массив со всеми известными вам ключевыми словами.

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

Для справки:

  • I знаю это не встроенный способ, это единственный способ, которым я мог придумать.Не отрицай меня за это.
  • Список, который я включил, - это список истинных ключевых слов.public, protected и друзья на самом деле не являются ключевыми словами, это просто имена важных методов, которые вызываются при создании модулей или классов.Вы можете думать об этом как об элементах Ruby DSL.
1 голос
/ 21 марта 2012

Используйте рубиновый камень rubykeyword . Это больше, чем просто определение ключевого слова. string.keyword? говорит вам, если его ключевое слово или нет. string.define дает определение ключевого слова. Там тоже string.example.

1 голос
/ 24 июня 2011

Насколько я знаю, protected на самом деле не зарезервированное слово. Это просто название важного метода.

http://wiki.rubyonrails.org/rails/pages/reservedwords перечисляет зарезервированные слова, которые вы не можете использовать (некоторые из них применяются только при использовании Rails или его зависимостей), а также имена методов, которые могут вызвать проблемы.

Если это не полностью отвечает на ваш вопрос, можете ли вы более полно определить, интересуетесь ли вы именами методов или переменных, и волнуетесь ли вы о словах, которые нельзя использовать вообще, или словах, могут ли другие вещи пойти не так?

0 голосов
/ 24 июня 2011

Если у вас есть класс, в котором вы хотите реализовать метод, называемый «защищенный», то перед определением этого метода создайте экземпляр этого класса и вызовите

instance.methods

Это покажет вам все методы, унаследованные для класса, и если есть «защищенный», то он зарезервирован ruby.

...