Ruby 向实例对象添加方法
大家好,我有一个关于向实例对象添加方法的问题。有些事我不明白 我正在尝试用Ruby做一个二进制搜索树。 所以我创建了一个节点类,如下所示:Ruby 向实例对象添加方法,ruby,methods,instance,Ruby,Methods,Instance,大家好,我有一个关于向实例对象添加方法的问题。有些事我不明白 我正在尝试用Ruby做一个二进制搜索树。 所以我创建了一个节点类,如下所示: class Node attr_accessor :value, :right, :left def initialize(value) @value = value end end 因此,当我想从该类创建实例对象时,我会执行以下操作: tree = Node.new(10) tree.left.left =
class Node
attr_accessor :value, :right, :left
def initialize(value)
@value = value
end
end
因此,当我想从该类创建实例对象时,我会执行以下操作:
tree = Node.new(10)
tree.left.left = Node.new(7)
但是,如果我想创建一个二叉搜索树,我需要左指针和右指针,用于小于或大于我的根数的值
所以应该是这样的
tree.left = Node.new(8)
tree.right = Node.new(13)
如果我想更进一步,我会这样做:
tree = Node.new(10)
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}
那么,为什么这个链接方法不能像上一个例子那样工作呢
谢谢
轻触
将对您的情况有所帮助:
left = Node.new(1).tap do |n|
n.left = Node.new(2).tap do |n|
n.left = Node.new(3)
end
end
关于如何使用该方法的文章很好
试一试,看看是否有效
祝你好运 在ruby中,为变量赋值的值就是您正在赋值的值。这意味着如果你这样做
a = 5
该表达式的值为5。此外,作业是从右到左完成的。这意味着在代码中:
left=Node.new(1).left = Node.new(2).left = Node.new(3)
首先创建
Node.new(3)
,然后创建Node.new(2),并将Node.new(3)
分配给2节点的左侧。此分配的结果是节点3
,您将其分配给节点1
的左侧
。同样,此赋值的结果是节点3,您再次将其赋值给变量left
。因此,最后,它的行为就像您刚刚将节点3
分配给左侧
,但同时执行了两个不必要的对象实例化 tnx的答案,但这是如何工作的:tree.left.left=Node.new(7)//“{10::{8::{6::nil}| nil}| nil}”在这种情况下,首先设置tree=Node10,然后设置tree.left=Node8。然后,如果你做了tree.left.left=Node.new(7)和你做了a=tree.left#=>Node 8 a.left=Node.new(7)#,这意味着你将Node 7设置为Node 8的左侧,这与left=Node.new(1)不同。left=Node.new(2)。left=Node.new(3)tnx对于你来说,回答Piotr,你的意思是这会起作用,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)-但是我怎么可以附加相同的实例方法。在一行中有不同的新对象和不同的值,但如果没有像树这样的实例对象,我就不能这样做?Tnx汤姆