不能在 Ruby 中的三元运算符的假部分使用 break

Can't use break in the false part of the ternary operator in Ruby

将以下代码视为 示例

这个有效

i = 0
flag = false
while i < 10
    flag = true
    if flag
        i+=1
    else
        break
    end
end

但是当把 If 部分变成这样的三元运算符时

i = 0
flag = false
while i < 10
    flag = true
    if flag ? i+=1 : break
end

我收到以下错误:

ternary.rb:5: void value expression
ternary.rb:6: syntax error, unexpected end-of-input, expecting keyword_end

我知道这段代码缺乏逻辑,但当前的示例是我想出的最好的例子,可以向您展示我遇到的情况。

您的代码中存在语法问题。您不能在三元运算符 ?: 中使用 if,如代码行 if flag ? i+=1 : break

所示

下面是一种编写代码的方法: 我冒昧地修改了代码,以说明可以使用 break

i = 0
flag = true
while i < 10
    flag = false if i > 5
    flag ? i+=1 : break
end

p i
#=> 6

你不应该在这里使用三元组中的 break。它使代码难以阅读。人们通常不希望表达式中有控制流关键字。实际上,看一下,您甚至 想要 使用三进制的原因并不清楚。它的两个分支完全没有关系。

如果您追求清晰紧凑的代码,请考虑使用提前中断。像这样:

while i < 10
  keep_processing = compute_flag # your logic here
  break unless keep_processing

  i += 1
end