从字符串变量调用方法

时间:2017-03-30 14:41:36

标签: ruby

我想替换下面的(非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

Nodestruct定义如下:

Node = Struct.new(:data, :left, :right)

我该怎么做?

1 个答案:

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