不能在 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
将以下代码视为 示例:
这个有效
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