Чтобы изучить Ruby, я реализую различные структуры данных, начиная с узлов и простого стека. Если я сопоставляю каждый def
с соответствующим концом, то возникает большая ошибка при ожидании $ end (EOF), но при получении end
. Так что я мог бы это исправить, сложив несколько end
в конце класса, но, очевидно, я не знаю, почему это работает.
require "Node"
class Stack
attr_accessor :top
def size
@size
end
def push(node)
if node && node.next
node.next = top
top = node
end
size++
def pop()
if top != nil
top = top.next
end
size--
def to_s
if top != nil
temp = top
while temp != nil
puts temp.value
temp = temp.next
end
else
puts "The stack is empty"
end
end
end
end
end
Класс узла очень прост и не должен вызывать проблем:
class Node
attr_accessor :next
def initialize(value)
@value = value
end
end
На этом стеке Франкенштейна все работает нормально, за исключением того, что нажатие на узел приводит к NoMethodError: undefined method +@' for nil:NilClass
. Не уверен, что это связано, но меня больше всего интересует синтаксис объявления метода / класса и использование end