Class: BinaryOperationNode
Instance Attribute Summary collapse
-
#lhs ⇒ Object
Returns the value of attribute lhs.
-
#op ⇒ Object
Returns the value of attribute op.
-
#rhs ⇒ Object
Returns the value of attribute rhs.
Attributes inherited from Node
Instance Method Summary collapse
- #evaluate ⇒ Object
-
#initialize(lhs, op, rhs) ⇒ BinaryOperationNode
constructor
A new instance of BinaryOperationNode.
Methods inherited from Node
Constructor Details
#initialize(lhs, op, rhs) ⇒ BinaryOperationNode
Returns a new instance of BinaryOperationNode.
103 104 105 106 |
# File 'lib/nodes/basenodes.rb', line 103 def initialize(lhs, op, rhs) super(op) @lhs, @op, @rhs = lhs, op, rhs end |
Instance Attribute Details
#lhs ⇒ Object
Returns the value of attribute lhs.
101 102 103 |
# File 'lib/nodes/basenodes.rb', line 101 def lhs @lhs end |
#op ⇒ Object
Returns the value of attribute op.
101 102 103 |
# File 'lib/nodes/basenodes.rb', line 101 def op @op end |
#rhs ⇒ Object
Returns the value of attribute rhs.
101 102 103 |
# File 'lib/nodes/basenodes.rb', line 101 def rhs @rhs end |
Instance Method Details
#evaluate ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/nodes/basenodes.rb', line 108 def evaluate if @rhs.evaluate.is_a?(ArrayNode) && @op == '+' return @value = @rhs.evaluate + @lhs.evaluate elsif @lhs.evaluate.is_a?(Array) && @op == '+' return @value = @lhs.evaluate.append(@rhs.evaluate) end if @rhs.evaluate.is_a?(ArrayNode) && @op == '-' return @value = @rhs.evaluate - @lhs.evaluate elsif @lhs.evaluate.is_a?(Array) && @op == '-' return @lhs.evaluate.reject { |v| v.evaluate == @rhs.evaluate } end if @rhs.evaluate.is_a?(ArrayNode) or @rhs.evaluate.is_a?(Array) and @lhs.evaluate.is_a?(Numeric) raise SyntaxError, "You can't subtract an array from a number! #{@lhs.evaluate} #{@op} #{@rhs.name}" end if @op == '/' @value = @lhs.evaluate.to_f.send(@op, @rhs.evaluate) else @value = @lhs.evaluate.send(@op, @rhs.evaluate) end end |