让我们假设我已经定义了一个前缀操作符*,并定义了一个与它关联的函数:
prefix operator * { }
prefix func * (value: Int) -> Bool {
return value == 5
}函数返回一个Bool,所以要做的一件事就是用!前缀操作符否定它。
但是,在尝试这样做时,必须使用括号:
let myBool = !(*5)有没有一种将操作符放在一起的方法:!*5
而不定义新的运算符:prefix operator !* { }?
发布于 2015-01-31 13:49:47
我想说这是不可能的。编译器将这两个操作符的组合看作是一个不能识别的操作符。
甚至不可能在not运算符和它的操作数之间添加一个空格,因为一元运算符必须“附加”。因此,剩下的两个选项是您想要避免的:
!*运算符注意,即使编译器能够将它们解析为两个不同的操作符,它也有可能无法工作。实际上,避免使用糖分语法并使用运算符作为正常函数,这是可行的:
let bool = (*)(5)
let not = (!)(bool)但这并不是:
(!)(*)(5)然而,使优先权显式地发挥作用:
(!)((*)(5))https://stackoverflow.com/questions/28252097
复制相似问题