我想通过计算器类发送输入。样本如下:
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中的类定义来解析输入感到有些困惑。任何提示都会非常感激。
答案 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建议的初始化程序中。
由于我仍然无法理解你想要完成什么(只是"执行适当的方法"通常不是你想做的所有事情,你需要在某个地方获得结果)这可能还不够。但是我希望它可以让你知道如何继续,否则你必须澄清你的意图(如果你不这样做,我就不会注意到这个答案的评论)。