Can';t在Ruby中三元运算符的假部分使用break

Can';t在Ruby中三元运算符的假部分使用break,ruby,break,ternary-operator,Ruby,Break,Ternary Operator,将以下代码视为一个示例: 这个有效 i = 0 flag = false while i < 10 flag = true if flag i+=1 else break end end 我知道这段代码缺乏逻辑性,但当前的示例是我提出的最好的示例,它向您展示了我遇到的问题。您的代码中存在语法问题。不能在三元运算符?:中使用if,这可以在代码行if标志中看到?i+=1:中断 下面是编写代码的一种方法: 我已经随意修改了代码,以

将以下代码视为一个示例:

这个有效

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

我知道这段代码缺乏逻辑性,但当前的示例是我提出的最好的示例,它向您展示了我遇到的问题。

您的代码中存在语法问题。不能在三元运算符
?:
中使用
if
,这可以在代码行
if标志中看到?i+=1:中断

下面是编写代码的一种方法: 我已经随意修改了代码,以说明可以使用
break

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

p i
#=> 6
i=0
flag=true
当我<10
flag=如果i>5,则为false
旗帜i+=1:中断
结束
PI
#=> 6

在这里,您不应该在三元组中使用
break
。这使得代码很难阅读。人们通常不希望表达式中包含控制流关键字。事实上,看看它,我们甚至不清楚为什么要使用三元。它的两个分支完全不相关

如果你在使用清晰的紧凑代码,考虑使用早期中断。大概是这样的:

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

  i += 1
end
而我<10
保持_processing=compute_flag#您的逻辑在这里
中断,除非继续处理
i+=1
结束

1。你有一个弗兰肯斯坦。它既不是有效的if,也不是有效的三元表达式。2.不要在三元运算符中使用break。另外,实际问题是什么?@SergioTulentsev为什么我不能在三元运算符的false部分使用break change
if标志?i+=1:是否将
中断为标志?i+=1:break@OccamRazor:从技术上讲,你可以,但不应该。三元运算符是一个表达式。两个分支都应该返回一个值。没有一个返回值,而另一个执行流控制。是的,它现在可以工作了,谢谢!而且,我知道flag总是正确的,代码没有意义。我说我用它来表达我的意思。而且,所有说你不能使用“闯入”的评论都是假的?
i = 0
flag = true
while i < 10
    flag = false if i > 5
    flag ? i+=1 : break
end

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

  i += 1
end