客户类的ruby没有方法错误...非常基本

时间:2014-01-07 23:08:42

标签: ruby

我是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)

这不是初始化自定义类的正确方法吗?

3 个答案:

答案 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