在.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