水晶中的获取功能不等待用户输入。当我启动我的控制台应用程序时,它立即输出如下所示的错误。这是说给in_array函数的第二个参数是Nil,但程序甚至不会要求用户输入。
我的代码如下所示。
# Only alice and bob are greeted.
def in_array(array : Array, contains : String)
array.each { |e|
if e == contains
return true;
end
}
return false;
end
allowed = ["Alice", "Bob"]
puts "Please enter your name to gain access."
name = gets
isAllowed = in_array(allowed, name)
if isAllowed
puts "You can enter the secret room"
else
puts "You are not allowed to enter the secret room."
end
我的代码的新版本包括?和read_line
# Only alice and bob are greeted.
allowed = ["Alice", "Bob"]
puts "Please enter your name to gain access."
name = read_line.chomp
if allowed.includes?(name)
puts "You can enter the secret room"
else
puts "You are not allowed to enter the secret room."
end
但是当我将Bob输入名称变量时,包括? method返回false并执行else语句。
答案 0 :(得分:6)
一些事情:
gets
可以返回nil
(如docs所示),例如,如果用户按下Ctrl + C,则必须处理此问题。如果您不关心此案例,可以if name = gets
使用gets.not_nil!
,或使用等同于read_line
的{{1}} gets.not_nil!
可以执行您要执行的操作