Ruby多线三元表达?

mat*_*lao 15 ruby ternary-operator

我试图转换这样的东西:

if condition?
   expression1 line 1
   expression1 line 2
   expression1 line 3
else 
   expression2 line 1
end
Run Code Online (Sandbox Code Playgroud)

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

condition? expression1 line 1; expression1 line 2; expression1 line 3 : expression2
Run Code Online (Sandbox Code Playgroud)

Jör*_*tag 27

In Ruby, it is always possible to replace newlines with semicolons, so you can, in fact, write your entire program in one single long giant line. Whether or not that is good for readability and maintainability, I will leave that up to you. (Note: you will sometimes have to insert parentheses for grouping in case of precedence mismatch.) Here is how you can write your conditional expression in a single line: if condition? then expression1 line 1; expression1 line 2; expression1 line 3 else expression2 line 1 end

  • 写得很好。:-) (2认同)

pti*_*rno 14

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

condition ? (expression1 line 1; expression1 line 2; expression1 line 3) : expression2
Run Code Online (Sandbox Code Playgroud)

您应该记住,这会降低代码的可读性.您可能最好使用if/ else语句来提高可读性.我在查看ruby代码时喜欢使用的一种资源是社区风格指南.正如介绍段落中所述:

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

希望这可以帮助


Gro*_*ery 12

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

condition ?
  expression 1 :
  expression 2
Run Code Online (Sandbox Code Playgroud)

是的,你需要使用分号表示多个表达式(并且括号不会受到伤害).

请不要这样做.坚持if陈述.


Sim*_*tti 6

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

condition = true
condition ? (puts("this"); puts("is"); puts("true")) : puts("this is false")
Run Code Online (Sandbox Code Playgroud)

或者在开始/结束块中.

condition = true
condition ? begin puts("this"); puts("is"); puts("true") end : puts("this is false")
Run Code Online (Sandbox Code Playgroud)

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

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