1

我最近刚开始使用 Ruby,我希望有一种速记方法可以将绑定方法用作我缺少的 proc。我试图从本质上做到这一点

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

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

我觉得在 ruby​​ 中应该有一种简单的方法来使用 SYMBOLS[] 作为绑定方法,所以只需

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

解决方案 Ruby 1.9.3

罗马 = SYMBOLS.values_at(*str.upcase.chars)

4

2 回答 2

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 回答
2
SYMBOLS.values_at(str.upcase.chars.to_a)

关于 using SYMBOLS[],您仍然需要将字符传递给方法。

您可以通过获取该方法SYMBOLS.method(:[]),例如,

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

我不相信在这种情况下它是最易读的——对我来说,调用map和传入SYMBOLS[]虽然简洁而实用,但比我更喜欢延迟理解正在发生的事情。

于 2013-01-23T18:25:46.633 回答