1

最近Rubyを使い始めたばかりですが、欠落しているプロシージャとしてバインドされたメソッドを使用するための省略形があることを望んでいます。私はこれを本質的にやろうとしています

SYMBOLS = {"I" => 1, "V" => 5, "X" => 10, ... }

roman = "zXXIV".upcase.chars.collect { |c| SYMBOLS[c] }
=> [nil, 10, 10, 1, 5]

ルビーには、バインドされたメソッドとしてSYMBOLS []を使用する簡単な方法があるはずなので、

roman = str.upcase.chars.collect &:SYMBOLS[]

ソリューションRuby1.9.3

roman = SYMBOLS.values_at(* str.upcase.chars)

4

2 に答える 2

2
SYMBOLS.values_at(str.upcase.chars.to_a)

の使用に関してSYMBOLS[]は、メソッドに文字を渡す必要があります。

メソッドは、たとえばSYMBOLS.method(:[])

> p = SYMBOLS.method(:[])
> p.call("X")
=> 10

この場合、それが最も読みやすいとは思いません。私にとって、呼び出しmapと受け渡しはSYMBOLS[]、簡潔で機能的ですが、何が起こっているのかを理解するのに、私が好むよりも長く遅れます。

于 2013-01-23T18:25:46.633 に答える
2
SYMBOLS = {"I" => 1, "V" => 5, "X" => 10 }
roman = "zXXIV"

p roman.chars.map(&SYMBOLS.method(:[]))
#=> [nil, 10, 10, 1, 5]
于 2013-01-23T18:41:32.043 に答える