如何强制/检查用户输入所需的日期类型



如何编写代码以前置用户输入特定值类型,例如int,然后强制或循环提示,直到用户输入int,而不是字符串或字符串或带有字符串字符的数字?我正在考虑使用或循环时的某种布尔值。

让我们从一些基础知识开始。将其放入文件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(): "asdfn" (ArgumentError)
        from userinput.rb:3:in `<main>'

现在,您可以构建一个循环,该循环提示用户,直到整数输入:

input = nil # initialize the variable so you can invoke methods on it
until input.is_a?(Fixnum) do
  print "Please enter a number: "
  input = Integer(gets) rescue nil
end

有趣的部分是input = Integer(gets) rescue nil,它转换整数,如果以上ArgumentError,则错误将被救出,并且input var再次为零。

更详细的写作方式(除了抓到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

一些笔记:

  1. 请不要对IntegerFixnum感到困惑。Integer是同样封装大数字的父类,但是测试Fixnum(如循环头中)是相当标准的。您也可以只使用.is_a?(Integer)而不改变行为。
  2. 大多数Ruby教程可能在print上使用puts,后者的输出不会以Newline结束,这使得提示在一行中出现。

相关内容

  • 没有找到相关文章