2014-01-07 19 views
0

我是新來的Ruby和這沒有任何意義,我...紅寶石客戶類沒有方法錯誤......非常基本的

require './stack.rb' 

class Queue 

    def initialize 
    @in_stack = new Stack 
    @out_stack = new Stack 
    end 

    def enqueue(element) 
    @in_stack.push(element) 
    end 

    def dequeue 
    if @out_stack.size == 0 
     until @in_stack.size == 0 
     @out_stack.push(in_stack.pop) 
     end 
    end 
    @out_stack.pop 
    end 

end 


# test 
a_queue = new Queue 

最後一行導致錯誤:queue.rb: 27:在主<main>': undefined method新」:對象(NoMethodError)

這不是正確的方法來初始化一個自定義類?

回答

2

不,它不是。正確的方法是Queue.new。你的代碼意味着你有一個隱含的接收器(它是<main>),並且調用new的參數Queue。要完全拼出:

<main>.new(Queue) 

這對我沒有意義。有沒有搞錯。

0

初始化對象的實例的正確方法是

Class.new 

new Class 

您需要更改

@in_stack = new Stack 
@out_stack = new Stack 

@in_stack = Stack.new 
@out_stack = Stack.new 

a_queue = new Queue 

a_queue = Queue.new 

您可能還需要閱讀一些基本介紹Ruby來了解更多關於它的語法。

0

創建Ruby中的任何類的新對象的正確方法是

object = Classname.new() 

但由於紅寶石的靈活性,可避免任何方法 和new()實際上是方法,我們正在呼籲類的括號所以

object = Classname.new 

這裏是校正代碼

require './stack.rb' 

class Queue 
    def initialize 
    @in_stack = Stack.new 
    @out_stack = Stack.new 
    end 

    def enqueue(element) 
    @in_stack.push(element) 
    end 

    def dequeue 
    if @out_stack.size == 0 
     until @in_stack.size == 0 
     @out_stack.push(in_stack.pop) 
     end 
    end 
    @out_stack.pop 
    end 
end 

# test 
a_queue = Queue.new