我有以下代碼:不能修改凍結對長整數紅寶石2.0
require 'prime'
class Numeric
#... math helpers
def divisors
return [self] if self == 1
@divisors ||= prime_division.map do |n,p|
(0..p).map { |i| n**i }
end.inject([1]) do |a,f|
a.product(f)
end.map { |f| f.flatten.reduce(:*) } - [self]
end
def divisors_sum
@divisors_sum ||= divisors.reduce(:+)
end
#... more methods that evaluate code and 'caches' and assigns (||=) to instance variables
end
至極輸出誤差:
> 4.divisors
/home/cygnus/Projects/project-euler/stuff/numbers.rb:24:in `divisors_sum': can't modify frozen Fixnum (RuntimeError)
當我刪除緩存到實例變量錯誤消失@divisors
, @divisors_sum
...等。這隻發生在紅寶石2.0。在1.9.3上運行沒有問題。發生了什麼事?
確認代碼工作正常上1.9 .3也確認在2.0.0中對我無效。然而,將一個實例變量添加到Fixnum是非常不尋常的。 – 2013-04-05 17:54:52
試圖加快procces。有些方法可能需要幾秒鐘,並且反覆計算大量數字會使執行時間增加。 – nicooga 2013-04-05 18:06:14
'素'是寶石?哪條語句在#24行? – 2013-04-05 18:13:04