我是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:in <main>': undefined method
new'for main:Object(NoMethodError)
这不是初始化自定义类的正确方法吗?
答案 0 :(得分:2)
不,不是。正确的方法是Queue.new
。您的代码表示您有一个隐式接收器(<main>
),并使用参数new
调用Queue
。完全拼写:
<main>.new(Queue)
这对我没有意义。到底是什么。
答案 1 :(得分: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的一些基本介绍,以了解有关其语法的更多信息。
答案 2 :(得分:0)
在ruby中创建任何类的新Object的正确方法是
object = Classname.new()
但是由于ruby的灵活性,你可以避免使用任何方法的括号
而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