FloatingRock
FloatingRock

Reputation: 7065

Method call from string variable

I want to replace the below (non DRY) code:

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

with something like this:

dir = value > node.data ? "right" : "left"
if node.dir.nil?
  node.dir = Node.new(value)
else
  insert(value, node.dir)
end

Node is a struct defined like so:

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

How can I do this?

Upvotes: 0

Views: 35

Answers (1)

Alejandro C.
Alejandro C.

Reputation: 3801

Since it's a struct, you can use [:left] or [:right] instead of .left and .right.

Therefore, you can

dir = value > node.data ? :right : :left
if node[dir].nil?
  node[dir] = Node.new(value)
else
  insert(value, node[dir])
end

Upvotes: 1

Related Questions