Привет, ребята У меня вопрос о добавлении методов к объектам экземпляра. Я чего-то не понимаю.Добавление методов к объектам экземпляра
Я пытаюсь создать двоичное дерево поиска в Ruby. Так что я сделал класс узлов, как например:
class Node
attr_accessor :value, :right, :left
def initialize(value)
@value = value
end
end
Так что, когда я хочу, чтобы создать экземпляр объекта из этого класса, я делаю это:
tree = Node.new(10)
Но если я хочу, чтобы создать бинарное дерево поиска Мне нужны левые и правые указатели для значений, которые меньше и выше моего корневого числа.
Так что это должно произойти примерно так.
tree.left = Node.new(8)
tree.right = Node.new(13)
И если я хочу идти дальше, я это сделать:
tree.left.left = Node.new(7)
И от моего инспектировать метод, который я адаптировано я получаю это:
"{10::{8::{6::nil|nil}|nil}|nil}"
Но из этого:
left=Node.new(1).left = Node.new(2).left = Node.new(3)
Получаю:
{3::nil|nil}
Итак, почему этот метод не работает так, как в предыдущем примере?
Благодаря
tnx для ответа, но как это работает тогда: tree.left.left = Node.new (7) //// "{10 :: {8 :: {6 :: nil | nil} | nil} | nil}" –
В этом случае вы сначала установите tree = Node10, затем tree.left = Node8. Тогда, если вы tree.left.left = Node.new (7) такое же, как если бы вы сделали а = tree.left # => Узел 8 a.left = Node.new (7) # Что означает, что вы установили узел 7 слева от узла 8 Это отличное от left = Node.new (1) .left = Node.new (2) .left = Node.new (3) –
tnx для вас ответьте Петр, так что вы сказали, что это будет работать left = Node.new (1) .left = Node.new (2) .left = Node.new (3) - Если я сделал это на экземпляре объекта, например tree = Node.new (10), как показано ниже: tree.left = Node.new (1) .left = Node.new (2) .left = Node.new (3) - Но как я могу добавить тот же экземплярметод .left с разными новыми объектами с разными значениями в строке, но я не могу сделать это без объекта экземпляра, например дерева? Tnx Tom –