Ruby 多行三元表达式?

问题描述 投票:0回答:4

我正在尝试转换这样的东西:

if condition?
   expression1 line 1
   expression1 line 2
   expression1 line 3
else 
   expression2 line 1
end

对于三元,我的问题是:如何将多行放入一行的一个表达式中?你是否像java中那样用分号分隔? 像这样吗?

condition? expression1 line 1; expression1 line 2; expression1 line 3 : expression2
ruby ternary-operator
4个回答
32
投票

在 Ruby 中,总是可以用分号替换换行符,因此实际上您可以将整个程序写在一个长的巨行中。无论这是否有利于可读性和可维护性,我都会把它留给你。 (注意:有时需要插入括号以防止优先级不匹配。)以下是如何在一行中编写条件表达式: if condition?然后表达式1第1行;表达式1第2行;表达式1第3行else表达式2第1行结束


26
投票

您可以通过多行表达三元:

condition ?
  expression 1 :
  expression 2

是的,您需要对多个表达式使用分号(并且括号不会有什么坏处)。

请不要按照 rubocop 风格这样做。 坚持使用单行或

if
块。


15
投票

您应该将表达式括在括号中:

condition ? (expression1 line 1; expression1 line 2; expression1 line 3) : expression2

您应该记住,这会降低代码的可读性。您最好使用

if
/
else
语句来提高可读性。在审查我的
ruby
代码时,我喜欢使用的一项资源是 社区风格指南。正如介绍性段落中所说:

这个 Ruby 风格指南推荐了最佳实践,以便现实世界 Ruby 程序员可以编写可由其他人维护的代码 现实世界的 Ruby 程序员。

希望这有帮助


7
投票

三元运算符需要单个指令块。这意味着您可以使用括号对指令进行分组

condition = true
condition ? (puts("this"); puts("is"); puts("true")) : puts("this is false")

或在开始/结束块中。

condition = true
condition ? begin puts("this"); puts("is"); puts("true") end : puts("this is false")

事实上,没有简单、干净的方法来实现结果,应该告诉您三元运算符并不是真正为多个语句设计的。 ;)

在这种情况下不要尝试使用它。使用标准 if/else。

© www.soinside.com 2019 - 2024. All rights reserved.