我一直在通过解决项目euler问题来学习ruby,在一个问题的解决方案中我看到你可以做"12341".chars.inject(1) { |prod, n| prod * n.to_i }
之类的事情。
我查看了ruby doc,但我找不到定义String#chars
的位置。
任何人都能解释一下这是如何运作的吗?
答案 0 :(得分:2)
它不存在于1.8.6中,如果你看http://ruby-doc.org/core/,就会得到它,但它出现在1.8.7和1.9 documentation中。
String#chars
只返回一个Enumerator(一个提供Enumerable接口的类),它依次产生字符串的每个字符。这允许您调用inject
,它将遍历Enumerable中的每个项目,将块应用于该项目以及您收集结果的值。在这种情况下,您从值1
开始,并在每次迭代时将该值乘以每个字符的整数值。
答案 1 :(得分:1)
记录在案here。
答案 2 :(得分:0)
Rails的ActiveSupport最初也是monkeypatched String#chars
。他们在答案中使用Rails还是ActiveSupport?