I am following chapter 2 of Understanding Computation to build a simple Ruby interpreter:
At some point after Class Assign
, Variable
and Number
are defined (which I think is actually irrelevant), I do this in irb
irb(main):001:0> statement = Assign.new(:x, Add.new(Variable.new(:x), Number.new(1)))
=> <<x = x + 1>>
irb(main):002:0> environment = { x: Number.new(2) }
=> {:x=><<2>>}
irb(main):003:0> statement, environment = statement.reduce(environment)
=> [<<x = 2 + 1>>, {:x=><<2>>}]
and everything goes perfectly.
But when I declare statement
and environment
in .rb
file:
def statement
Assign.new(:x, Add.new(Variable.new(:x), Number.new(1)))
end
def environment
{ x: Number.new(2) }
end
something goes wrong when I type statement, environment = statement.reduce(environment)
in irb:
irb(main):001:0> statement, environment = statement.reduce(environment)
NoMethodError: undefined method
reduce
for nil:NilClass from (irb):1 from /usr/bin/irb:12:in<main>
I don't know if the bug is on the way I declare statement
or environment
?
How could I declare the variable in .rb
file?
I check this question and @variable_name
doesn't seems to work with a non-string variable.