我想替换下面的(非DRY)代码:
dir = value > node.data ? "right" : "left"
if value > node.data
if node.right.nil?
node.right = Node.new(value)
else
insert(value, node.right)
end
else
if node.left.nil?
node.left = Node.new(value)
else
insert(value, node.left)
end
end
有这样的事情:
dir = value > node.data ? "right" : "left"
if node.dir.nil?
node.dir = Node.new(value)
else
insert(value, node.dir)
end
Node
是struct
定义如下:
Node = Struct.new(:data, :left, :right)
我该怎么做?
答案 0 :(得分:1)
由于它是一个结构,您可以使用[:left]
或[:right]
代替.left
和.right
。
因此,你可以
dir = value > node.data ? :right : :left
if node[dir].nil?
node[dir] = Node.new(value)
else
insert(value, node[dir])
end