假设我已经定义了一个前缀运算符*
,以及与之关联的函数:
prefix operator * { }
prefix func * (value: Int) -> Bool {
return value == 5
}
该函数返回Bool
,因此obvios要做的是用!
前缀运算符否定它。
在尝试这样做时,必须使用括号:
let myBool = !(*5)
有没有办法一起使用运算符:!*5
没有定义新的运算符:prefix operator !* { }
?
答案 0 :(得分:1)
我会说这是不可能的。编译器将2个运算符的组合视为单个运算符,无法识别。
甚至不可能在not运算符和它的操作数之间添加一个空格,因为一元运算符必须“附加”。因此,剩下的只有两个选项是您要避免的选项:
!*
运算符请注意,即使编译器能够将它们解析为2个不同的运算符,它也可能无法运行。事实上,避免使用糖语法并将运算符用作普通函数,这有效:
let bool = (*)(5)
let not = (!)(bool)
但这不是:
(!)(*)(5)
虽然使显示优先权明确起作用:
(!)((*)(5))