Crystal函数不等待用户输入

时间:2016-10-11 19:44:05

标签: crystal-lang

水晶中的获取功能不等待用户输入。当我启动我的控制台应用程序时,它立即输出如下所示的错误。这是说给in_array函数的第二个参数是Nil,但程序甚至不会要求用户输入。

7

我的代码如下所示。

# 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语句。

1 个答案:

答案 0 :(得分:6)

一些事情:

  1. 您看到的错误是编译错误。这意味着您的程序未运行,无法编译。
  2. gets可以返回nil(如docs所示),例如,如果用户按下Ctrl + C,则必须处理此问题。如果您不关心此案例,可以if name = gets使用gets.not_nil!,或使用等同于read_line的{​​{1}}
  3. 数组有一个方法gets.not_nil!可以执行您要执行的操作