程序化方式获取Ruby个关键字
Programmatic way to obtain Ruby keywords
我有一个 Ruby 数组,包含所有关键字。
例如:
RUBY_KEYWORDS = %w(
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
)
我的问题很简单:
是否有内置方式以编程方式访问所有关键字?
我的一些项目需要针对用户输入运行查询,
并且必须在中定义相同的数组有点烦人
所有这些项目。
我认为你不能,因为它将在解析器中定义。
您的替代方法是查看源代码:https://github.com/ruby/ruby/blob/ruby_2_1/defs/keywords
试试这个代码:)
RubyToken::TokenDefinitions.select { |definition| definition[1] == RubyToken::TkId }
.map { |definition| definition[2] }
.compact
.sort
# returns :
# ["BEGIN", "END", "__FILE__", "__LINE__", "alias", "and", "begin", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "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"]
我有一个 Ruby 数组,包含所有关键字。
例如:
RUBY_KEYWORDS = %w(
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
)
我的问题很简单:
是否有内置方式以编程方式访问所有关键字?
我的一些项目需要针对用户输入运行查询, 并且必须在中定义相同的数组有点烦人 所有这些项目。
我认为你不能,因为它将在解析器中定义。
您的替代方法是查看源代码:https://github.com/ruby/ruby/blob/ruby_2_1/defs/keywords
试试这个代码:)
RubyToken::TokenDefinitions.select { |definition| definition[1] == RubyToken::TkId }
.map { |definition| definition[2] }
.compact
.sort
# returns :
# ["BEGIN", "END", "__FILE__", "__LINE__", "alias", "and", "begin", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "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"]