2017-07-13 5 views
0

ハッシュで、私は未定義のキーの値を取得しようとすると、私は取得しないようにRubyのMatchDataのデフォルト値を設定できますか?

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

あなたは '(?P \ D *)'を意味しますか? –

答えて

0

あなたが「named_captures」を使用することができ2.4+ルビーを使用している場合:(!文字列化されたキーを持つ)これはHashある

line = "matchBegins\/blabla\" = (20, 10);" 
get = line.match(/matchBegins\/(?<match1>\D*)" *= *(?<match2>.*);/) 
hash = get.named_captures 

を、あなたはデフォルト値を指定するfetchを使用することができます。

hash.fetch('unknownKey', 'default') 

あなたがnamescapturesを使用してハッシュを構築することができ1.9.1+ルビーを使用している場合:

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から任意のキーを要求する必要があるのはなぜですか?

+0

Vamsi Krishna、キャプチャ/ジップについての発言のおかげで –

関連する問題