Ruby: 无法对两个参数进行数学运算
Ruby: Unable to do math operations with two arguments
请记住,我是 Ruby 的新手。我目前正在学习一个教程,该教程要求我创建一个基本计算器。我需要创建一个具有以下方法的计算器 class;说明,加减乘除。
我的初始化方法可以成功获取两个数字,但我似乎无法让其他方法正常工作。
这是我的代码:
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
我得到 "wrong number of arguments (0 for 2)"
代码正确,但意义不大。您正在将值传递给初始化程序,因此我希望您的代码按如下方式使用
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
现在你的代码没有多大意义。您的 Calculator
class 初始化为两个值,但您从不使用它们。如果你真的想用值初始化,你的 class 应该看起来更像这样:
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
将 return 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)
returning 8
。这种方法对我来说更有意义,但您使用的教程似乎需要第一种方法。
您当前的代码也使用了 +=
和 -=
,但我不确定您试图通过此实现什么。在你现有的代码中,它们的意义不大,因为你是在局部变量上操作,而不是你的实例变量。
请记住,我是 Ruby 的新手。我目前正在学习一个教程,该教程要求我创建一个基本计算器。我需要创建一个具有以下方法的计算器 class;说明,加减乘除。
我的初始化方法可以成功获取两个数字,但我似乎无法让其他方法正常工作。
这是我的代码:
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
我得到 "wrong number of arguments (0 for 2)"
代码正确,但意义不大。您正在将值传递给初始化程序,因此我希望您的代码按如下方式使用
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
现在你的代码没有多大意义。您的 Calculator
class 初始化为两个值,但您从不使用它们。如果你真的想用值初始化,你的 class 应该看起来更像这样:
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
将 return 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)
returning 8
。这种方法对我来说更有意义,但您使用的教程似乎需要第一种方法。
您当前的代码也使用了 +=
和 -=
,但我不确定您试图通过此实现什么。在你现有的代码中,它们的意义不大,因为你是在局部变量上操作,而不是你的实例变量。