我正在通过TestFirst.org的Ruby课程,我遇到了一个编码挑战,要求我构建一个方法“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 }
然而,这个proc只返回了真值。真值取决于word
数组中是否包含little_words
被测试。这让我相信proc在它甚至评估问号右边的代码之前就会返回。
我阅读了procs和三元运算符的Ruby文档,但我无法确定这两者是否可以一起使用。
我搜索了Stack Overflow中的“proc ruby ternary”,并阅读了当我开始发布这个问题时弹出的类似问题。我也找不到任何东西。
所以,我来找你,Stack Overflow的天才。我有一个问题。
在Ruby中,可以在proc中使用三元运算符吗?
(如果是的话,为什么我的小proc不起作用?)
答案 0 :(得分:3)
尝试:
capitalizer = Proc.new { |word| little_words.include?(word) ? word : word.capitalize }
这应该有效。