不能在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