我正在尝试转换这样的内容:
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
答案 0 :(得分:23)
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
答案 1 :(得分:14)
您应该将表达式包装在括号中:
condition ? (expression1 line 1; expression1 line 2; expression1 line 3) : expression2
您应该记住,这会降低代码的可读性。您最好使用if
/ else
语句来提高可读性。我在审核ruby
代码时想要使用的一个资源是community style guide。正如介绍段落中所述:
这个Ruby风格指南推荐了最佳实践,以便实现真实世界 Ruby程序员可以编写可由其他人维护的代码 现实世界的Ruby程序员。
希望这有帮助
答案 2 :(得分:11)
你可以用多行表达三元:
condition ?
expression 1 :
expression 2
是的,您需要在多个表达式中使用分号(并且括号不会受到伤害)。
请不要这样做。坚持if
陈述。
答案 3 :(得分:5)
三元运算符需要一个指令块。这意味着您要么使用括号
对指令进行分组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。