Chr*_*ris 12 ruby regex capture switch-statement
我想使用命名捕获来解析用户输入以提高可读性.
当他们键入命令时,我想捕获一些参数并传递它们.我在case语句中使用RegExps,因此我无法分配返回值/pattern/.named_captures.
这是我希望能够做到的(例如):
while command != "quit"
print "Command: "
command = gets.chomp
case command
when /load (?<filename>\w+)/
load(filename)
end
end
Run Code Online (Sandbox Code Playgroud)
kac*_*ick 14
命名捕获在此语法时设置局部变量.
regex-literal =~ string
Run Code Online (Sandbox Code Playgroud)
不要设置其他语法.#参见rdoc(re.c)
regex-variable =~ string
string =~ regex
regex.match(string)
case string
when regex
else
end
Run Code Online (Sandbox Code Playgroud)
我也喜欢命名捕获,但我不喜欢这种行为.现在,我们必须使用$〜以防语法.
case string
when /(?<name>.)/
$~[:name]
else
end
Run Code Online (Sandbox Code Playgroud)
这很丑,但在Ruby 1.9.3中对我有用:
while command != "quit"
print "Command: "
command = gets.chomp
case command
when /load (?<filename>\w+)/
load($~[:filename])
end
end
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用$~,$LAST_MATCH_INFO.的英文扩展名.