Ruby 如何强制/检查用户输入所需的日期类型
如何编写代码,让用户输入特定的值类型(如int),然后强制或循环一个提示,直到用户输入int,而不是字符串或带有字符串的数字?我正在考虑使用for或while循环的某种类型的布尔值。让我们从一些基础知识开始。将其放入一个文件Ruby 如何强制/检查用户输入所需的日期类型,ruby,user-input,Ruby,User Input,如何编写代码,让用户输入特定的值类型(如int),然后强制或循环一个提示,直到用户输入int,而不是字符串或带有字符串的数字?我正在考虑使用for或while循环的某种类型的布尔值。让我们从一些基础知识开始。将其放入一个文件userinput.rb: print "Please enter a number: " input = gets puts input 然后使用ruby userinput.rb运行。您将得到一个提示,程序将输出您键入的任何内容 您希望输入为整数,因此让我们使用inte
userinput.rb
:
print "Please enter a number: "
input = gets
puts input
然后使用ruby userinput.rb运行。您将得到一个提示,程序将输出您键入的任何内容
您希望输入为整数,因此让我们使用integer()
转换输入:
print "Please enter a number: "
input = gets
puts Integer(input)
输入一个整数,您将得到一个整数输出。键入任何其他内容,您将得到如下内容:
userinput.rb:3:in `Integer': invalid value for Integer(): "asdf\n" (ArgumentError)
from userinput.rb:3:in `<main>'
有趣的部分是input=Integer(gets)rescue nil
,它转换整数,并且在出现类似上述ArgumentError
的情况下,错误被解救,并且input
var再次为nil
更详细的编写方法(除了只捕获ArgumentError
异常)是:
input = nil # initialize the variable so you can invoke methods on it
until input.is_a?(Fixnum) do
print "Please enter a number: "
begin
input = Integer(gets)
rescue ArgumentError # calling Integer with a string argument raises this
input = nil # explicitly reset input so the loop is re-entered
end
end
一些注意事项:
请不要被和弄糊涂Integer
是也封装大数字的父类,但是测试Fixnum
是相当标准的(就像在循环头中一样)。您也可以只使用。is_是?(整数)
,而不更改行为
大多数Ruby教程可能使用将置于打印
之上,后者的输出不会以换行结束,这会使提示显示在一行中
欢迎来到stackoverflow。请说明您尝试了什么,哪些方法不起作用(例如错误消息,哪些方法不起作用,…),以及您尝试解决问题的方法。请用附加信息编辑您的问题。非常感谢,非常有用。在rescue nil之前,我并不真正理解fixnum的代码,您是否建议我在某个地方进行阅读,以便更好地掌握till循环和fixnum。此外,还可以在integer类中使用gets方法?gets
只是一个始终返回字符串的方法。如果输入asdf
,它将调用Integer(“asdf”)
,如果输入像23
这样的数字,它将调用Integer(“23”)
。Integer()
部分不是类而是函数。我很清楚这一定会让人困惑,我建议您运行irb
,并在提示中玩一玩,以获得概念。请看下面的内容:我还建议您阅读Ruby中的循环,谷歌搜索会让您在这里走得更远。我编辑了我的答案,给出了一个更详细的例子。我明白了。本质上,您是在integer方法内部使用gets方法。那么,究竟是什么使“Fixnum”成为一个类呢?我很难理解ruby语言的结构。你有skype吗?请添加我或用户名:jarggsx
input = nil # initialize the variable so you can invoke methods on it
until input.is_a?(Fixnum) do
print "Please enter a number: "
begin
input = Integer(gets)
rescue ArgumentError # calling Integer with a string argument raises this
input = nil # explicitly reset input so the loop is re-entered
end
end