通过类方法解析参数

时间:2014-05-04 21:53:03

标签: ruby

我想通过计算器类发送输入。样本如下:

class Calculator
  def initialize(num1, num2, op)
    @num1 = num1
    @num2 = num2
    @op = op
  end

  def addition
    if @op == "+"
      sum = @num1 + @num2
    end 
    puts sum
  end
end

p calc = Calculator.new(2, 5, '+')

这不符合预期。有一种方法可以使用C ++中的switch语句(根据操作数解析出要执行的函数),但是我对如何通过Ruby中的类定义来解析输入感到有些困惑。任何提示都会非常感激。

2 个答案:

答案 0 :(得分:1)

您可以使用send。将字符串与其他操作数一起传递给它,该方法将被执行。

@num1, @num2, @op = 2, 5, "+"
@num1.send(@op, @num2) # => 7

@num1, @num2, @op = 2, 5, "*"
@num1.send(@op, @num2) # => 10

答案 1 :(得分:0)

由于将你的例子转换成有用的东西并不难,我会试一试。请尝试以下方法:

class Calculator
  def initialize(num1, num2, op)
    @num1 = num1
    @num2 = num2
    @op = op
  end

  def execute
    res = nil
    case @op
      when "+" 
        res = @num1 + @num2
      when "-"
        res = @num1 - @num2
    end 
    # puts res
    res
  end
end

calc = Calculator.new(2, 5, '+')
calc.execute
# => 7

calc = Calculator.new(2, 5, '-')
calc.execute
# => -3

这应该会给你一个想法,因为#execute方法将返回你期望的结果。如果您希望打印它,则可以取消注释其中的puts res,但请注意,puts将返回nil。如果您不想在#execute对象上自行呼叫Calculator,可以将调用包含在@bjhaid建议的初始化程序中。

由于我仍然无法理解你想要完成什么(只是"执行适当的方法"通常不是你想做的所有事情,你需要在某个地方获得结果)这可能还不够。但是我希望它可以让你知道如何继续,否则你必须澄清你的意图(如果你不这样做,我就不会注意到这个答案的评论)。