Ruby:无法使用两个参数进行数学运算

时间:2015-01-22 17:41:15

标签: ruby-on-rails ruby methods calculator

请记住,我对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)”

2 个答案:

答案 0 :(得分:3)

代码是正确的,但它没有多大意义。您正在将值传递给初始值设定项,因此我希望您的代码可以按照以下方式使用

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  

答案 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。这种方法对我来说更有意义,但看起来你正在使用的教程需要第一种方法。

您当前的代码也在使用+=-=,但我不确定您要使用此功能实现的目标。在您现有的代码中,它们意义较小,因为您在操作局部变量,而不是实例变量。