Похоже, вы хотите продолжать спрашивать имя пользователя, пока не найдете пользователя, который вошел в систему; то есть до тех пор, пока h[:username]
не совпадет с именем, введенным для одного из хэшей h
в users
. Если это так, вы хотите сначала создать al oop, который отображает результат для каждого введенного имени пользователя и предоставить способ вырваться из l oop, когда найден вошедший в систему пользователь.
loop do
...
<display result for current user entry>
<break if named user is logged in>
end
См. Ядро # l oop. Сначала вам нужно получить имя пользователя.
loop do
print "Username: "
name = gets.chomp
...
<display result for current user entry>
<break if the value of name is logged in>
end
Теперь нам нужно найти , зарегистрировано ли значение name
.
users = [
{ username: "mashrur", password: "password1" },
{ username: "jack", password: "password2" },
{ username: "arya", password: "password3" },
{ username: "jonshow", password: "password4" },
{ username: "heisenberg", password: "password5" }
]
loop do
print "Username: "
name = gets.chomp
found = users.find { |h| h[:username] == name }
...
<display result for current user entry>
<break if the value of name is logged in>
end
См. Enumerable # find . find
возвращает га sh h
, для которого h[:username] == name
равно true
, если users
содержит такой га sh, в противном случае возвращается nil
.
Последний шаг для отображения результата и прерывания от l oop, если указанный пользователь вошел в систему.
loop do
print "Username: "
name = gets.chomp
found = users.find { |h| h[:username] == name }
puts found.nil? ? "Please try again" : "Succesfully Logged In"
break unless found.nil?
end
Вот пример разговора:
Username: bob
Please try again
Username: sue
Please try again
Username: jack
Succesfully Logged In