允许中缀运算符没有关联性的目的是什么?

时间:2016-01-12 18:19:42

标签: swift operators

问题1:允许中缀运营商没有关联性的目的是什么? (可能有人可以给出一个自定义运算符的示例,其中这比实际包含一些关联性更好?)

问题2:是否可以为中缀运算符设置默认关联性,用于没有运算符的运算符?

我们可以定义自定义中缀运算符而不为其输入任何关联性,例如

/* no associativity */
infix operator +| {
    precedence 140
}

/* left associativity */
infix operator *| {
    associativity left
    precedence 140
}

现在,人们可以假设使用没有关联性的中缀运算符(上面+|)旁边的一个具有关联性(*|以上)---其中两个运算符具有相同的优先级---会表现出来就像两个运算符具有相同的关联性一样。但是,情况并非如此

func +| (lhs: Int, rhs: Int) -> Int {
    return lhs+rhs
}

func *| (lhs: Int, rhs: Int) -> Int {
    return lhs*rhs
}

let a : Int = 1 +| 2 *| 3
/* Error: non-associative operator is adjacent to 
          operator of same precedence               */

如果我们将associativity left添加到上面+|的定义中,代码运行正常(按预期方式)

/* no associativity */
infix operator +| {
    associativity left
    precedence 140
}

// ...

let a : Int = 1 +| 2 *| 3
/* 9, OK ((1+2)*3 = 9) */

如果我查看本机Swift运算符(Cmd-单击import Swift中的 Swift ),我找不到没有关联性的单个中缀运算符。

为什么我们允许在没有关联性的情况下定义中缀运算符,是否可以使用这些运算符?是否可以为中缀运算符设置默认关联性,以便具有关联性的运算符的行为就像具有默认关联性一样?

0 个答案:

没有答案