我最近刚开始使用 Ruby,我希望有一个使用绑定(bind)方法作为 proc 的简写,但我缺少。我基本上是在尝试这样做
SYMBOLS = {"I" => 1, "V" => 5, "X" => 10, ... }
roman = "zXXIV".upcase.chars.collect { |c| SYMBOLS[c] }
=> [nil, 10, 10, 1, 5]
我觉得在 ruby 中应该有一个简单的方法来使用 SYMBOLS[] 作为绑定(bind)方法,所以就
roman = str.upcase.chars.collect &:SYMBOLS[]
解决方案 Ruby 1.9.3
roman = SYMBOLS.values_at(*str.upcase.chars)
最佳答案
SYMBOLS.values_at(str.upcase.chars.to_a)
关于使用 SYMBOLS[]
,您仍然需要将字符传递给方法。
您可以通过 SYMBOLS.method(:[])
获取方法,例如,
> p = SYMBOLS.method(:[])
> p.call("X")
=> 10
我不相信它在这种情况下是最可读的——对我来说,调用 map
并传入 SYMBOLS[]
,虽然简洁且实用,但会延迟理解什么是发生的时间比我希望的要长。
关于Ruby:将一组键映射到值速记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14486626/