我正在尝试编写两个实例方法,其中method2可以处理method1的输出。
例如,像这样:
puts Numbers::new(2,2).sum.sqrt
>16
我认为代码看起来像这样:
class Numbers
def initialize(x,y)
@x=x
@y=y
end
def sum
@z=@x+@y
end
def sqrt
@z**2
end
end
情况并非如此,当我尝试调用sqrt时,我得到NoMethodError。
我知道我在这里遗漏了一些简单而基本的东西,但我找不到直接的答案。
谢谢!
答案 0 :(得分:6)
sum
方法返回@z
的值Fixnum
。 Ruby正试图在sqrt
实例上执行Fixnum
方法,因此也是例外。
可能这就是你想要的:
class Fixnum
def square
self**2
end
end
class Array
def sum
reduce(0, &:+)
end
end
现在你可以:
[1,2].sum.square # 9
答案 1 :(得分:0)
为了调用实例方法,您需要一个实例 - 您的sum方法需要返回实例以允许链接(与sqrt相同)。
方法链接很常见,但IMO在这种情况下有点违反直觉。