首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby找到一个操作符,并使它成为一个

Ruby找到一个操作符,并使它成为一个
EN

Stack Overflow用户
提问于 2019-11-17 21:17:01
回答 2查看 108关注 0票数 0

到了极致。

怎样才能让这个接线员工作?

代码语言:javascript
复制
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 op num2.to_i
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-18 06:30:02

在Ruby中,运算符基本上是一种方法。这样做:

代码语言:javascript
复制
puts num1.to_i.public_send(op.chomp, num2.to_i)

使用Object#public_send,可以发送使用字符串或符号指定的(public)方法。注意,如果您的Ruby是旧版本,您可能需要用public_send替换send

票数 2
EN

Stack Overflow用户

发布于 2019-11-18 11:54:45

正如您在其他答案中所看到的,您可以使用send (或public_send)调用方法。

有一个问题:gets包括换行符(例如+\n)。to_i方法可以处理这个问题。send试图用换行符找到一个方法(但不会找到它)。因此,您必须从操作符中删除换行符(使用strip-method )。

所以完整的例子是:

代码语言:javascript
复制
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)

我建议在阅读之后立即转换这些值,这样以后的生活就更容易了:

代码语言:javascript
复制
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)

请注意,没有有效运算符的检查。当你进来的时候

代码语言:javascript
复制
1
2
u

你得到了一个undefined method 'u' for 1:Integer (NoMethodError)-error。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58905279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档