Из документов Ruby для метода index
:
Если вместо аргумента указан блок, возвращается индекс первого объекта, для которого блок возвращает true
. Возвращает nil
, если совпадений не найдено.
Если ваш вопрос «почему программа не обрабатывает sh, когда возвращает false?», То ваш вопрос основан на ложных предпосылках.
Во-первых, Ruby не обработает sh из неожиданных возвращаемых значений. Он просто вернет их, и ваш код будет обрабатывать или не обрабатывать эти возвращаемые значения.
Во-вторых, index
никогда не возвращает ложь вместо числа. Возвращает число или nil
.
Звучит так, будто есть только недопонимание того, что возвращает index
. Какой бы код вы ни выполняли внутри блока, он будет иметь некоторое возвращаемое значение, но это значение игнорируется, если оно не равно true
. Если это true
, то index
возвращает число. (индекс значения в массиве) Если это что-то отличное от true
, то index
продолжит итерацию по массиву. Если весь массив повторяется и значение true
не возвращается, то index
возвращает nil
.
Итак, чтобы ответить на ваш вопрос , что происходит со значением "false", возвращаемым для "w" (индекс 0)? , false
игнорируется.