我一直在通過解決項目euler問題來學習ruby,並且在一個問題的解決方案中,我看到您可以執行諸如"12341".chars.inject(1) { |prod, n| prod * n.to_i }
之類的操作。在ruby文檔中,string.chars是在哪裏定義的?
我查看了紅寶石文檔,但找不到String#chars
的定義。
任何人都可以解釋這是如何工作的?
我一直在通過解決項目euler問題來學習ruby,並且在一個問題的解決方案中,我看到您可以執行諸如"12341".chars.inject(1) { |prod, n| prod * n.to_i }
之類的操作。在ruby文檔中,string.chars是在哪裏定義的?
我查看了紅寶石文檔,但找不到String#chars
的定義。
任何人都可以解釋這是如何工作的?
它不存在於1.8.6中,如果您查看http://ruby-doc.org/core/,您會得到它,但它出現在1.8.7和1.9 documentation中。
String#chars
只是返回一個Enumerator(提供接口的類),該類依次產生字符串的每個字符。這允許您調用inject
,它將遍歷Enumerable中的每個項目,將塊應用於該項目以及您在其中收集結果的值。在這種情況下,您從值1
開始,並在每次迭代中將該值乘以每個字符的整數值。
它被記錄在here。
Rails的ActiveSupport最初也是String#chars
。他們在答案中是否使用Rails或ActiveSupport?
他們沒有。這是常規的紅寶石。但我認爲這個猴子補丁是我需要更多考慮的東西。 – PaddyDwyer 2010-09-14 14:21:48
它在1.8.7文檔中列出:http://ruby-doc.org/core-1.8.7/classes/String.html#M000777 – sepp2k 2010-09-10 20:50:59
啊,你說得對。一個簡單的谷歌搜索讓我去http://ruby-doc.org/core/classes/String.html,這是1.8.6文檔;我沒有檢查1.8.7文檔。 – 2010-09-10 21:12:24
啊,那是我出錯的地方。我沒有意識到有1.8.7文檔。 – PaddyDwyer 2010-09-11 19:55:39