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“+”),则将执行方法加法。将方法加法
设置为结束
之前的行,尽管这不是一个好主意,但它应该打印求和