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

以下面的代码为例

这个有效

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

但是当转向如此部分进入三元运算符时

 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 if flag ? i+=1 : break

这是编写代码的一种方法:我已经自由地修改代码,以便说明可以使用break

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

你不应该在这里使用三元组。 它使得难以阅读的代码。 人们通常不期望表达式中的控制流关键字。 实际上,看着它,不清楚为什么你甚至想要使用三元。 它的两个分支完全不相关。

如果您正在使用明确的紧凑代码,请考虑使用早期中断。 像这样的东西:

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