我这样做:

puts "What's your number? "
x = gets.to_i
puts x.class

如果用户输入3,则该字符串(输入)将转换为一个integer.但如果我输入"Charly",它也会转换为一个integer.

测试用户是否输入数字的最佳方法是什么?

推荐答案

您可以将数字转换回字符串,看看它是否与原始输入匹配.

ok = false
puts "Enter a number"
while not ok do
    s = gets.chomp
    if s.to_i.to_s == s then
        entered_number = s.to_i
        ok = true
    else
      warn "Please enter a number"
    end
end
puts "You entered #{entered_number}"

Ruby相关问答推荐

Ruby迭代器与函数.返回函数的第一个值,而不交互整个列表

使用Mac命令行解密用Ruby加密的Zip

为什么 rdoc 注释似乎以两个井号/井号符号开头?

Ruby 中的 Float#floor 和 Float#to_i 有什么区别?

Ruby - 获取正在执行的文件

从 Time 对象获取下/上个月

Ruby 对象打印为指针

将参数传递给erb视图

class_eval <<-"end_eval", __FILE__, __LINE__ 在 Ruby 中是什么意思?

Ruby 中方法名称的限制是什么?

group_by 在 rails by 2 或更多属性

Ruby 'require' 语句是在类定义的内部还是外部?

如何删除Ruby中数组中满足条件的所有元素?

如何设置方法测试中使用的私有实例变量?

如何通过拆分字符的最后一次出现将字符串拆分为仅两部分?

从 Ruby 中的 URL 获取文件名的好方法是什么?

处理来自 Net::HTTP 的异常的最佳方法是什么?

如何在 Ruby 中将类构造函数设为私有?

如何从字符串创建 Ruby 日期对象?

通过多个分隔符拆分字符串