Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 通过类方法解析参数_Ruby - Fatal编程技术网

Ruby 通过类方法解析参数

Ruby 通过类方法解析参数,ruby,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, '+')

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

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++中使用一个开关语句(解析基于操作数的函数),但是对于如何通过Ruby中的类来解析输入来,我有点困惑。任何提示都将不胜感激。

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

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

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

因为将你的例子转换成有用的东西并不难,所以我将试一试。请尝试以下操作:

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
方法将返回您期望的结果。如果您想打印它,您可以取消注释
put res
,但是请注意,
put
将返回
nil
。如果您不想调用
#在
计算器
对象上自己执行
,您可以按照@bjhaid的建议将调用包含到初始值设定项中


由于我仍然无法理解您真正想要完成的是什么(仅仅“执行适当的方法”通常不是您想要做的全部,您将需要在某个地方得到结果),这可能是不够的。但我希望它能给你一个如何继续下去的想法,否则你将不得不澄清你的意图(并对这个答案发表评论,因为如果你不这样做,我将不会注意到)。

好吧,你也把我弄糊涂了。请解释您希望代码执行的操作。显然,您的
addition
方法将不会被调用,但您甚至还没有编写一个在标题中引用的“class方法”。目前来看,
sum
变量很可能具有错误的范围,但只要不调用
加法
,这是一个没有意义的问题。请更清楚地说明
计算器
类的用途,以便我们了解它应该如何工作。我希望通过这一点来完成的是根据作为参数输入的操作数执行适当的方法。例如,如果参数为(2,5“+”),则将执行方法加法。将方法
加法
设置为
结束
之前的行,尽管这不是一个好主意,但它应该打印
求和