3
クリスタルのgets関数がユーザーの入力を待っていません。コンソールアプリケーションを起動すると、すぐ次のようなエラーが出力されます。 in_array関数に与えられた2番目のパラメータは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
私のコードの新しいバージョンには次のものが含まれていますか? and 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
しかし、変数nameにBobを入力すると、メソッドはfalseを返し、else文を実行します。
1. [OK]を実装しようとしているものない方法
includes?
を持っていますコンパイラがエラーを検出するとコンパイルが中止され、エラーを修正してこれが私にはっきりと分かるようにする必要があります。 2. gets関数をread_lineに変更しました。私は変数nameを入れて、入れた名前を表示しました。3.はい、in_array関数はincludeとまったく同じですか?私はそれを今変更しましたが、まだ許可されている配列にあるBobという名前を入れたときにfalseとなってelseを実行するため、正しく動作しません。私の新しいバージョンを私の新しいバージョン – DB93で更新しました 'gets'そして' read_line'は末尾の改行を含みます、あなたはそれを削除するために 'chomp'を呼び出す必要があります – asterite