请记住,我对Ruby很新。我目前正在按照一个教程要求我创建一个基本的计算器。我需要创建一个Calculator类,它具有以下方法;描述,加,减,乘和除。
我的初始化方法可以成功获取两个数字,但我似乎无法使其他方法正常工作。
这是我的代码:
class Calculator
attr_accessor :x, :y
def self.description
"Performs basic mathematical operations"
end
def initialize(x, y)
@x = x
@y = y
end
def add(x, y)
x += y.to_i
end
def subtract(x, y)
x -= y.to_i
end
end
我得到“错误的参数数量(0表示2)”
答案 0 :(得分:3)
代码是正确的,但它没有多大意义。您正在将值传递给初始值设定项,因此我希望您的代码可以按照以下方式使用
c = Calculator.new(7, 8)
c.add
# => 15
这可能是你打电话的方式。但是,这是不可能的,因为您定义了add()
来接受两个参数。因此,您应该使用
c = Calculator.new(7, 8)
c.add(1, 2)
# => 3
但是,将x
和y
传递给初始化程序有什么意义呢?正确的实现是
class Calculator
attr_accessor :x, :y
def self.description
"Performs basic mathematical operations"
end
def initialize(x, y)
@x = x.to_i
@y = y.to_i
end
def add
x + y
end
def subtract
x - y
end
end
或更可能
class Calculator
def self.description
"Performs basic mathematical operations"
end
def initialize
end
def add(x, y)
x.to_i + y.to_i
end
def subtract(x, y)
x.to_i - y.to_i
end
end
答案 1 :(得分:2)
现在你的代码没有多大意义。您的Calculator
类使用两个值初始化,但您从不使用它们。如果你真的想用值初始化,你的类看起来应该更像这样:
class Calculator
attr_reader :x, :y
def self.description
"Performs basic mathematical operations"
end
def initialize(x, y)
@x = x
@y = y
end
def add
x + y
end
def subtract
x - y
end
end
然后您将运行如下代码:Calculator.new(3, 5).add
,它将返回8
。在这种情况下,您不需要attr_accessor
,只需attr_reader
。
否则,你不应该像这样初始化值:
class Calculator
def self.description
"Performs basic mathematical operations"
end
def add(x, y)
x + y
end
def subtract(x, y)
x - y
end
end
您可以调用Calculator.new.add(3, 5)
来回复8
。这种方法对我来说更有意义,但看起来你正在使用的教程需要第一种方法。
您当前的代码也在使用+=
和-=
,但我不确定您要使用此功能实现的目标。在您现有的代码中,它们意义较小,因为您在操作局部变量,而不是实例变量。