• 结合律

    结合律

    第一个字符是 ^ 的二元运算符是右结合,所有其他二元运算符都是左结合。

    1. proc `^/`(x, y: float): float =
    2. # 右关联除法运算符
    3. result = x / y
    4. echo 12 ^/ 4 ^/ 8 # 24.0 (4 / 8 = 0.5, then 12 / 0.5 = 24.0)
    5. echo 12 / 4 / 8 # 0.375 (12 / 4 = 3.0, then 3 / 8 = 0.375)

    一元运算符总是比任何二元运算符优先: $a + b is ($a) + b 而不是 $(a + b)

    如果一元运算符的第一个字符是 @ 它是 符印样 运算符,比 主后缀 优先: @x.abc 解析成 (@x).abc$x.abc 解析成 $(x.abc)

    对于非关键字的二元运算符,优先级由以下规则确定:

    ->, ~> or => 结尾的运算符称为 箭头形, 优先级最低。

    如果操作符以 = 结尾,并且它的第一个字符不是 <, >, !, =, ~, ?, 它是一个 赋值运算符 具有第二低的优先级。

    否则优先级由第一个字符决定。

    优先级运算符首字符终端符号
    10 (highest)$ ^OP10
    9 / div mod shl shr % % \ /OP9
    8+ -+ - ~ |OP8
    7&&OP7
    6...OP6
    5== <= < >= > != in notin is isnot not of= < > !OP5
    4andOP4
    3or xorOP3
    2@ : ?OP2
    1赋值运算符 (like +=, *=)OP1
    0 (lowest)箭头形操作符 (like ->, =>)OP0

    运算符是否使用前缀运算符也受前面的空格影响(此版本的修改随版本0.13.0引入):

    1. echo $foo
    2. # 解析成
    3. echo($foo)

    间距还决定了 (a, b) 是否被解析为调用的参数列表,或者它是否被解析为元组构造函数:

    1. echo(1, 2) # 传1和2给echo
    1. echo (1, 2) # 传元组(1, 2)给echo