在Hash中,我可以使用
map = Hash.new("(0,0)")
或
map = Hash.new()
map.default = "(0, 0)"
为未定义的键设置默认值,这样当我尝试检索未定义键的值时,我不会收到错误。但是在MatchData中,例如,在:
line = "matchBegins\/blabla\" = (20, 10);"
get = line.match(/matchBegins\/(?<match1>\D*)" *= *(?<match2>.*);/)
puts get[:notExisted]
我会收到错误。我已经检查了MatchData的文档,但是没有设置默认值的任何内容。我对么?感谢
答案 0 :(得分:0)
如果您使用的是Ruby 2.4+,则可以使用'named_captures':
line = "matchBegins\/blabla\" = (20, 10);"
get = line.match(/matchBegins\/(?<match1>\D*)" *= *(?<match2>.*);/)
hash = get.named_captures
这是Hash
(带有字符串键!),您可以使用fetch
指定默认值:
hash.fetch('unknownKey', 'default')
如果您使用的是Ruby 1.9.1+,则可以使用names
和captures
构建哈希:
line = "matchBegins\/blabla\" = (20, 10);"
get = line.match(/matchBegins\/(?<match1>\D*)" *= *(?<match2>.*);/)
hash = Hash[get.names.zip(get.captures)]
或者只是解救异常:
value = get['unknownKey'] rescue 'default'
(我觉得很难看,这样的代码可能会掩盖其他错误)
但是,说实话,我想知道你的用例是什么。为什么需要从MatchData
请求任意密钥?