puts "Tell me a number"
num1 = gets
puts "Tell me an another number"
num2 = gets
puts "Tell me an operator"
op = gets
puts num1.to_i.send( op.strip, num2.to_i)
我建议在阅读后立即转换这些值,这样以后的工作会更容易:
puts "Tell me a number"
num1 = gets.to_i
puts "Tell me an another number"
num2 = gets.to_i
puts "Tell me an operator"
op = gets.strip
puts num1.public_send( op, num2)
请注意,不检查有效操作符。当您输入
1
2
u
你会得到一个undefined method 'u' for 1:Integer (NoMethodError)错误。
3条答案
按热度按时间qni6mghb1#
在Ruby中,运算符基本上就是一个方法。
使用
Object#public_send
,你可以发送一个用String或Symbol指定的(公共)方法。注意如果你的Ruby版本太旧,你可能需要用send
替换public_send
。rlcwz9us2#
正如您在其他答案中所看到的,您可以使用
send
(或public_send
)来调用方法。有一个问题:
gets
包含一个换行符(例如+\n
)。to_i
方法可以处理这个问题。send
尝试找到一个带有换行符的方法(但找不到)。因此,您必须从运算符中删除换行符(使用strip
-方法)。完整的例子是:
我建议在阅读后立即转换这些值,这样以后的工作会更容易:
请注意,不检查有效操作符。当您输入
你会得到一个
undefined method 'u' for 1:Integer (NoMethodError)
错误。tzxcd3kk3#
共享的
public_send
方法已经工作得很好了,但这里有一个替代方法。它基本上使用
[Object#method][1]
和[Method#call][1]
做了完全相同的事情。我发现了这一点,感谢this post和@ArapRakshit,在那里我得到了我需要的答案。