2013-04-15 53 views
3

我繼承Enumerator這樣的:引發ArgumentError在#NEW,子類枚舉

class CuadraticPrimeGenerator < Enumerator 
    def initialize(a=1,b=49) 
    super do |y| 
     x = 1 
     loop do 
     y << x**2 + a*x + b 
     x += 1 
     end 
    end 
    end 
end 

但是......

> CuadraticPrimeGenerator.new(1,49) 
0027.rb:41:in `initialize': 49 is not a symbol (TypeError) 
    from 0027.rb:41:in `initialize' 
    from 0027.rb:48:in `new' 
    from 0027.rb:48:in `<main>' 

的思考?

回答

3

什麼:

class CuadraticPrimeGenerator < Enumerator 
    def initialize(a=1,b=49) 
    super() do |y| 
     count, x = 0, 1 
     loop { y.yield(x**2 + a*x + b) } 
    end 
    end 
end 
+4

的原因是默認的枚舉類不會在2個參數取。因此,當你在沒有括號的情況下調用super時,ruby會假定你想要傳入子類中的任何參數。因此,您必須專門使用括號來告訴ruby否則。 –

+0

現在它很有意義:) – nicooga