Я прохожу курс Ruby на TestFirst.org и столкнулся с проблемой кодирования, которая потребовала от меня создания метода titleize, который использует каждое слово в строке с заглавной буквы, кроме «маленьких слов».
Следующий код решает проблему.
def titleize(words)
little_words = %w[a an the and but or for nor on at to from by over]
capitalizer = Proc.new do |word|
if little_words.include? word
word
else
word.capitalize
end
end
words.split.map(&capitalizer)*' '
end
Первоначально я пробовал использовать следующую процедуру.
capitalizer = Proc.new { |word| little_words.include? word ? word : word.capitalize }
Однако эта процедура вернула только истинные значения. Значения истинности исходили от того, был ли проверяемый word
включен в массив little_words
. Это наводит меня на мысль, что процедура возвращается еще до того, как оценивает код справа от вопросительного знака.
Я прочитал документацию Ruby для обоих процессов и тернарного оператора, но я не нашел ничего относительно того, можно ли их использовать вместе.
Я искал Stack Overflow по запросу «proc ruby ternary» и прочитал похожие вопросы, которые возникли, когда я начал публиковать этот вопрос. Я там тоже ничего не нашел.
Итак, я подошел к вам, гениям Stack Overflow. У меня вопрос.
Можно ли в Ruby использовать тернарный оператор в процессе?
(и если да, то почему моя маленькая процедура не сработала?)
include?(word)
- какая-то проблема синтаксического анализа. - person max pleaner   schedule 05.06.2016