SuperManEver
SuperManEver

Reputation: 2362

Is is possible to create instance of child class from parent class?

I try to define operational semantics in Ruby, just for learning purposes. And I'd like to define operations like: add, multiply, subtraction, division.

Here is code:

class Operation < Struct.new(:left, :right)
  def inspect
    "#{self}"
  end

  def reducible?
    true
  end 
end

class Add < Operation
  def to_s
    "#{left} + #{right}"
  end

  def reduce
    if left.reducible?
      Add.new(left.reduce, right)
    elsif right.reducible?
      Add.new(left, right.reduce)
    else
      Number.new(left.value + right.value)
    end
  end

end

class Multiply < Operation
  def to_s
    "#{left} * #{right}"
  end

   def reduce
    if left.reducible?
      Multiply.new(left.reduce, right)
    elsif right.reducible?
      Multiply.new(left, right.reduce)
    else
      Number.new(left.value + right.value)
    end
  end
end

Is it possible to have the same thing, but define reduce in Operation class, but create instance of some particular child class in Operation class?

Thanks in advance.

Upvotes: 1

Views: 43

Answers (1)

sawa
sawa

Reputation: 168199

Yes.

class Operation
  def reduce
    if left.reducible?
      self.class.new(left.reduce, right)
    elsif right.reducible?
      self.class.new(left, right.reduce)
    else
      Number.new(left.value + right.value)
    end
  end
end

Upvotes: 5

Related Questions