在.rb文件中声明变量会导致不需要的输出
我遵循Understanding Computation的第2章构建一个简单的Ruby解释器:
  在Class Assign之后的某个时刻,定义了Variable和Number (我认为这实际上是不相关的),我在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>语句,environment = statement.reduce(environment)
 => [<<x = 2 + 1>>, {:x=><<2>>}] 
一切都完美无缺。
  但是当我在.rb文件中声明statement和environment时: 
def statement
    Assign.new(:x, Add.new(Variable.new(:x), Number.new(1)))
end
def environment
    { x: Number.new(2) }
end
  当我在irb中输入statement, environment = statement.reduce(environment)出现问题: 
irb(main):001:0>语句,environment = statement.reduce(environment)
  NoMethodError:undefined方法reduce nil:来自(irb)的NilClass:来自/ usr / bin / irb的1:12:在<main> 
  我不知道该错误是否在我声明statement或environment ? 
  我怎么能在.rb文件中声明变量? 
  我检查了这个问题, @variable_name似乎不适用于非字符串变量。 
这两个代码是完全不同的。 第一个使用变量,第二个使用方法。
变量是这样定义的:
name_of_var = initialization_expression
方法是这样定义的:
def name_of_method(parameter_one, parameter_two)
  body_expression
end
  我不知道该错误是否在我声明statement或environment 
是。
这是发生的事情:
def statement
  Assign.new(:x, Add.new(Variable.new(:x), Number.new(1)))
end
def environment
  { x: Number.new(2) }
end
  在这里你定义了两种方法, statement和environment 。  他们所做的事实际上是无关紧要的,因为你从来不称他们。 
statement, environment = statement.reduce(environment)
  在这里,你声明了两个变量, statement和environment 。  你通过调用变量statement的内容来调用reduce来初始化它们(这是nil ,因为statement还没有被初始化(毕竟我们只是在初始化它的过程中),而非初始化的变量在Ruby中计算为nil )作为参数传递变量environment的内容(因为同样的原因也是nil )。 
你永远不会调用你定义的方法,因为它们被你用相同名称创建的两个变量所影响。
我怎么能解决它?
你已经做到了:第一段代码有效。
链接地址: http://www.djcxy.com/p/95421.html