【问题标题】:Priority in chained comparisons in Julia, does "var1 && var2 != 1" mean "(var1 and var2) != 1"?Julia 中链式比较的优先级,“var1 && var2 != 1”是否意味着“(var1 and var2) != 1”?
【发布时间】:2023-03-14 18:19:01
【问题描述】:

我对 Julia 中的链式比较有疑问。我读了this section in the manual,但还不清楚。

在 Julia 中,这样做:

if var1 && var2 != 1

意思是(在 Python 中):

if (var1 and var2) != 1:

谢谢!

【问题讨论】:

    标签: comparison-operators chained julia


    【解决方案1】:

    您总是可以引用一个表达式来查看解析器如何解释它:

    julia> :(var1 && var2 != 1)
    :(var1 && (var2!=1))
    

    在这种情况下,!=&& 绑定得更紧密。这是具有这两个运算符的语言(例如 C 和 Java)的标准优先级。

    【讨论】:

    • 这个引用功能非常有用!谢谢!
    【解决方案2】:

    从我在该页面和链接页面 (http://docs.julialang.org/en/latest/manual/control-flow/#man-short-circuit-evaluation) 上看到的内容来看,没有。操作顺序不同。结果是这样的:

    if (var1) && (var2 != 1)
    

    首先,检查 xscalar 变量是否有一个满足 if 语句的值,就像您这样做一样

    if var1
    

    然后,当且仅当它被接受时,才会评估下一部分:

    if var2 != 1
    

    换句话说,这两个语句大致等价:

    if var1
        if var2 != 1
    
    and
    
    if var1 && var2 != 1
    

    (原谅缺乏julia语法知识)

    python 等价于:

    if var1 and var2 != 1:
    

    或者,用括号更清楚地显示,

    if (var1) and (var2 != 1) :
    

    【讨论】:

    • 你的意思是:if (xscalar) and (dim != 1) ?
    • 我试图解释值的评估顺序,仍然在 julia,而不是 python
    • 您能否提出一个 Python 中的等价物,或者添加一些 Python 类比?
    • 你打败了我也改变了我的答案:P
    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多