结合使用自定义运算符

时间:2015-01-31 13:26:18

标签: swift operators

假设我已经定义了一个前缀运算符*,以及与之关联的函数:

prefix operator * { }
prefix func * (value: Int) -> Bool {
    return value == 5
}

该函数返回Bool,因此obvios要做的是用!前缀运算符否定它。
在尝试这样做时,必须使用括号:

let myBool = !(*5)

有没有办法一起使用运算符:!*5
没有定义新的运算符:prefix operator !* { }

1 个答案:

答案 0 :(得分:1)

我会说这是不可能的。编译器将2个运算符的组合视为单个运算符,无法识别。

甚至不可能在not运算符和它的操作数之间添加一个空格,因为一元运算符必须“附加”。因此,剩下的只有两个选项是您要避免的选项:

  1. 使用括号
  2. 定义新的!*运算符
  3. 请注意,即使编译器能够将它们解析为2个不同的运算符,它也可能无法运行。事实上,避免使用糖语法并将运算符用作普通函数,这有效:

    let bool = (*)(5)
    let not = (!)(bool)
    

    但这不是:

    (!)(*)(5)
    

    虽然使显示优先权明确起作用:

    (!)((*)(5))