据我了解,接受用户输入的方式是
puts "Can you guess what number the computer is thinking of?"
userguess = gets.chomp
gets.chomp
是一种字符串方法,因此如果用户输入数字5
,userguess
会将值"5"
存储为字符串。然后我必须做userguess.to_i!
将其转换为int。但是,我不想这样做。我想以字符串或int接受用户输入,然后让程序执行以下操作:
if @guess.is_a?(Integer) == true
puts "I got your number. Let me get back to you."
# do something
elsif @guess.is_a?(Integer) == false
puts "That's not a number. You MUST enter a number! Try again"
# Ask the user to guess again.
else
#something else
end
我不想明确地接受用户输入作为字符串,因为我想在程序中稍后检查它是字符串还是int。我该怎么做?
答案 0 :(得分:0)
不,这是不可能的。
但是你可以定义一个小函数来检查该字符串是否可以是整数:
def is_i?(s)
s.to_i.to_s == s
end
请注意,在这种情况下,带空格的字符串不是整数:
is_i? '123' # true
is_i? '123 ' # false
is_i? ' 123' # false
is_i? '12 123' # false
要处理第二个和第三个示例,您可以删除用户输入。
您的代码如下:
guess = gets.chomp.strip
if is_i? guess
puts 'is integer'
else
puts 'is not an integer'
end
答案 1 :(得分:0)
这是不可能的。来自终端的所有用户输入都是字符串。如果有可能,您认为用户如何输入数字5
而不是字符串"5"
?
答案 2 :(得分:0)
要检查字符串是否包含有效整数(或浮点数等),您可以使用此方法:
def coerce(string)
Integer(string) rescue Float(string) rescue string
end
coerce('115').class # Fixnum
coerce('115.12').class # Float
coerce('115.aa').class # String
同时查看highline gem,它提供了许多有用的功能,当涉及到cli。
答案 3 :(得分:0)
您不了解键盘设备和控制台输入的工作原理。
键盘上输入 所有输入并通过gets
或其他任何内容读取,始终一个字符串。你无法得到任何其他东西。
我们使用gets.chomp
删除用户按 Return 或 Enter 时输入的尾随换行符。例如,如果我没有输入任何其他内容,则裸gets
将返回行尾:
gets #=> "\n"
添加其他字符会产生这些字符,以及终止的行尾:
gets #=> "foo\n"
我们使用chomp
删除该尾随行尾。重复相同的输入并使用chomp
:
gets.chomp #=> ""
gets.chomp #=> "foo"
Ruby可以很容易地判断输入的内容是否可以干净地转换为整数。只需使用Integer()
即可。以下是IRB会话的一些输出:
>> Integer('1') #=> 1
>> Integer('123') #=> 123
>> Integer('foo')
ArgumentError: invalid value for Integer(): "foo"
from (irb):14:in `Integer'
from (irb):14
from /usr/local/bin/irb:12:in `<main>'
>> Integer('1a')
ArgumentError: invalid value for Integer(): "1a"
from (irb):15:in `Integer'
from (irb):15
from /usr/local/bin/irb:12:in `<main>'
使用rescue
可以轻松处理异常:
begin
Integer('1')
rescue ArgumentError
puts 'not a number'
end #=> 1
或者:
begin
Integer('a')
rescue ArgumentError
'not a number'
end #=> "not a number"