Ruby - 可以在proc中使用三元运算符吗?

时间:2016-06-04 23:04:51

标签: ruby ternary-operator proc

我正在通过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不起作用?)

1 个答案:

答案 0 :(得分:3)

尝试:

capitalizer = Proc.new { |word| little_words.include?(word) ? word : word.capitalize }

这应该有效。