阅读理解O' Reilly的计算我遇到了一些问题 (我对Ruby完全不熟悉,本书的介绍是我获得的唯一Ruby知识)
在第44页上有一个例子
class Number
def evaluate(environment)
self
end
end
根据本书评估Number.new(23).evaluate({})应该给23但是我得到一个错误,Number类有零参数而我正在传递一个 将类定义更改为类Number<结构(:val)有效,但没有任何反应 我改为代码后
class Number < Struct.new(:value)
def evaluate(environment)
environment[self] = value
self.value = value
value
end
def to_s
print(self)
end
end
这似乎有效,但我无法弄清楚为什么作者会开始发布非工作代码?我错过了什么吗? 如果有人读过这本书可以帮助
,那就太好了另一个快速的问题,我如何使用irb来评估一个带有Ruby类的文件,但是保持解释器打开,这样我就可以继续..当我做irb test.rb时,它会进行评估但是然后退出.. 感谢
答案 0 :(得分:1)
您需要在irb中评估先前页面中的代码块。要使'Number.new(23).evaluate({})'工作,请将下面的代码复制并粘贴到irb。
在ruby中,您可以打开现有类的类定义,并执行添加方法或更改类行为等操作。谷歌的“开放课程”了解更多细节。
class Number < Struct.new(:value)
end
class Number
def to_s
value.to_s
end
def inspect
"«#{self}»"
end
end
class Number
def evaluate(environment)
self
end
end
要评估irb中的文件,请使用“require”。
irb > require 'number' # evaluates ./number.rb
答案 1 :(得分:0)
当使用类方法initialize
构造对象时调用new
方法,因此两者的arity必须匹配,默认initialize
不带参数,这就是为什么你得到的错误。
class Number
def initalize(number)
# ...
end
end
Number.new(1)
您问题中的代码不正确。