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

时间:2015-12-07 13:56:16

标签: ruby break ternary-operator

将以下代码视为示例

这个有效

$conn = new mysqli('host', 'user', 'password', 'database');
$conn->query($myQuery);

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

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

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

2 个答案:

答案 0 :(得分:3)

您的代码中存在语法问题。您无法在三元运算符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

答案 1 :(得分:2)

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

如果您在清除紧凑代码后再考虑使用早期中断。像这样:

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

  i += 1
end