В Ruby, почему метод .index работает со значением «ложь»? - PullRequest
0 голосов
/ 27 марта 2020

Глядя на этот код, я не понимаю, почему метод .index работает, когда внутри {} гласная возвращает ложь? метод ниже.

гласная? Метод возвращает значение true / false. Если это правда, индексная позиция, в которой был найден гласный, сохраняется для разделения слова в этой позиции.

Для слова «слово» он не находит гласный до индекса 1, так что происходит со значением «false» возвращается для «w» (индекс 0)?

Почему программа не обрабатывает sh, когда возвращает число вместо числа?

def louchebemize_word(word)
  random_suffix = %w[em é ji oc ic uche ès].sample
  return word if word.size == 1 # do not translate one-letter word
  if vowel? word[0] 
    return "l#{word}#{random_suffix}" # word beginning with vowel
  else
    # word beginning with 1 or more consonants
    first_vowel_index = word.chars.index { |letter| vowel?(letter) } 
    beginning = word[0...first_vowel_index]
    ending = word[first_vowel_index...word.size]
    "l#{ending}#{beginning}#{random_suffix}"
  end
end

def vowel?(letter)
  return %w[a e i o u].include? letter
end

puts louchebemize_word("word")

1 Ответ

1 голос
/ 27 марта 2020

Из документов Ruby для метода index :

Если вместо аргумента указан блок, возвращается индекс первого объекта, для которого блок возвращает true. Возвращает nil, если совпадений не найдено.

Если ваш вопрос «почему программа не обрабатывает sh, когда возвращает false?», То ваш вопрос основан на ложных предпосылках.

Во-первых, Ruby не обработает sh из неожиданных возвращаемых значений. Он просто вернет их, и ваш код будет обрабатывать или не обрабатывать эти возвращаемые значения.

Во-вторых, index никогда не возвращает ложь вместо числа. Возвращает число или nil.

Звучит так, будто есть только недопонимание того, что возвращает index. Какой бы код вы ни выполняли внутри блока, он будет иметь некоторое возвращаемое значение, но это значение игнорируется, если оно не равно true. Если это true, то index возвращает число. (индекс значения в массиве) Если это что-то отличное от true, то index продолжит итерацию по массиву. Если весь массив повторяется и значение true не возвращается, то index возвращает nil.

Итак, чтобы ответить на ваш вопрос , что происходит со значением "false", возвращаемым для "w" (индекс 0)? , false игнорируется.

...