【发布时间】:2019-07-10 12:41:14
【问题描述】:
我正在使用 Julia 1.1.1,昨天发现了一些有趣的东西。
下面的小例子
考虑以下代码:
julia> if ((true)) true else false end
true
按预期工作
但是,当尝试执行以下操作时:
julia> function foo()
true
end
foo (generic function with 1 method)
julia> if ((foo())) (true,false) else (false,true) end
ERROR: syntax: space before "(" not allowed in "foo() ("
julia>
但是,当以标准方式编写表达式时,它似乎可以工作
julia> if ((foo()))
(true, false)
else
false
end
(true, false)
julia>
根据我对以下帖子Does Julia have a ternary conditional operator? 的理解,我应该被允许以与三元数大致相同的方式编写 if 表达式,而且我通常可以。但是,对于这种情况,三元运算符似乎按预期工作,但不是 if 表达式
julia> ((foo())) ? (true,false) : (false,true)
(true, false)
两者之间是否存在细微差别?
正如 crstnbr 在 cmets 中所述,允许使用以下语法:
if ((foo())) true,false else false,true end
【问题讨论】:
-
请注意
if ((foo())) true,false else false,true end有效。 -
注意!谢谢 :) 返回带括号的元组时我应该更改我的标题吗?如果表达式和多行对您有用,一行之间的细微差别会不会?
-
我要补充一点,抛开语法上的好奇心,我认为在没有适当终止不同语句的情况下编写单行代码是非常糟糕的风格(更不用说想法了)。这完全更具可读性(并且完全避免使用难看的括号):
if true; true, false; else; false, true; end
标签: julia