Цель части кода, с которой вы боретесь, состоит в том, чтобы проверить, написаны ли все элементы имени заглавными буквами. Есть два способа решения этой проблемы:
Найдите любой элемент без заглавной буквы.
Если такой элемент существует, это означает, что имя недопустимо, поэтому метод is_valid_name
должен вернуть false
. Этот подход используется в вашем коде:
def is_valid_name(str)
#...
name.each do |word| #1
if !capitalized(word) #2
return false #3
end
end
return true #4
end
- Перебирать каждую часть имени
- Проверьте, написано ли слово с большой буквы. Мы хотим разбить только тогда, когда мы найдем недопустимое (не заглавные) слово. Это происходит, когда
capitalized(word)
возвращает false
: таким образом, условие if !capitalized(word)
на самом деле if !false
, что равно if true
.
- Мы ввели, это означает, что наше слово недопустимо, поэтому мы возвращаем false из метода
is_valid_name
.
Проверьте, написаны ли все элементы с заглавной буквы.
Это более простое решение. Мы просто хотим проверить, возвращает ли метод capitalized(word)
значение true для всех элементов имени.
Для этого мы можем использовать метод all? , который возвращает true, если условие в блоке возвращает true для каждого элемента; иначе ложно. Таким образом, мы можем заменить весь код выше одной строкой:
name.all?{|word| capitalized(word) }
Окончательная реализация метода проверки может выглядеть так:
def is_valid_name(str)
name = str.split(' ')
name.length < 2 && name.all?{|word| capitalized(word)}
end
Надеюсь, это поможет вам!