为什么`infix`是默认值

Sim*_*lGy 1 infix-notation swift

我正在阅读swift中的高级操作符.

基本功能:

func add(a: Unicorn, b: Unicorn) -> Unicorn { return a + b }
add(u1, u2) // two unicorns are added
Run Code Online (Sandbox Code Playgroud)

中缀运算符:

func + (a: Unicorn, b: Unicorn) -> Unicorn { return a + b }
c = u1 + u2
Run Code Online (Sandbox Code Playgroud)

后缀:

postfix func + (a: Unicorn) -> Unicorn { return a + 2 } // nonsense example
u1+
Run Code Online (Sandbox Code Playgroud)

我不明白怎么infix可以假定是默认的.从正常的函数声明来看,它看起来并没有什么不同.

这里的规则是什么 - 任何单个字符是中缀操作的合法名称?这是否意味着单个字符函数不被允许?可以任意在SWIFT两个参数的函数调用中缀风格?

idm*_*ean 6

我不明白中缀如何被认为是默认值.

如果使用两个参数实现运算符,编译器可以确定您需要一个中缀运算符,因为只有中缀运算符对两个值进行操作.

如果使用一个值实现运算符,则编译器不确定它是前缀还是后缀运算符并且会抱怨.

中缀运算符取两个值,后缀和前缀只有一个.

这是否意味着单个字符函数不被允许?swift中的任何双参数函数都可以称为中缀风格吗?

不是.以这些字符开头的函数是运算符:/,=, - ,+,!,*,%,<,>,&,|,^,?或~ 1.运算符也可以包含多个字符,但必须以其中一个字符开头.

请记住,必须首先声明一个新的运算符,例如:

prefix operator / {}
prefix func / (a: Int) -> Int {
    return a / 42
}

/56
Run Code Online (Sandbox Code Playgroud)

但是,此声明不起作用,因为a它不是运算符必须启动的字符之一:

prefix operator a {}
Run Code Online (Sandbox Code Playgroud)

1实际上有更多的角色.阅读这里.