에 냉동 Fixnum이라는 수정할 수 없습니다 나는 다음과 같은 코드가 있습니다루비 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에 인스턴스 변수를 추가하는 것은 아주 드문 일입니다. –
procces의 속도를 높이려고했습니다. 어떤 방법은 몇 초가 걸릴 수 있으며 많은 숫자를 반복해서 계산하면 실행 시간이 길어집니다. – nicooga
'프라임'은 보석입니까? 어떤 성명서가 24 번 줄에 있니? –