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

但是,将 xy 传递给初始化程序有什么意义呢?正确的实现是

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。这种方法对我来说更有意义,但您使用的教程似乎需要第一种方法。

您当前的代码也使用了 +=-=,但我不确定您试图通过此实现什么。在你现有的代码中,它们的意义不大,因为你是在局部变量上操作,而不是你的实例变量。