为什么 `infix` 是默认值

Why is `infix` the default

我正在阅读 swift 中的 advanced operators

基本功能:

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

一个中缀运算符:

func + (a: Unicorn, b: Unicorn) -> Unicorn { return a + b }
c = u1 + u2

后缀:

postfix func + (a: Unicorn) -> Unicorn { return a + 2 } // nonsense example
u1+

我不明白如何将 infix 假定为默认值。在我看来,它与普通函数声明没有任何不同。

这里的规则是什么——任何单个字符都是中缀操作的合法名称吗?这是否意味着不允许使用单个 char 函数? 任何 swift 中的二元函数可以称为中缀样式吗?

如果我答对了你的问题,我认为答案是:你正在重载现有的运算符。

假设我们要使用自定义运算符,我需要声明 prefix/infix/postfix

编辑: 在网上找到了一个更好的例子:

喜欢:

infix operator **= { associativity right precedence 90 }
func **= (inout left: Double, right: Double) {
    left = left ** right
}

不,并非所有单个字符都可以是中缀运算符。通常,规则是标识符(变量、方法名称等)中允许的字符和运算符中允许的字符不相同。

例如指定运算符允许的字符here

更具体地说,标记中的第一个字符是决定性的。

I don't understand how infix can be presumed to be the default.

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

如果您使用一个值实现运算符,编译器不确定它是前缀运算符还是后缀运算符,并且会报错。

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

Does this mean single char functions are not otherwise allowed? Can any two-argument function in swift be called infix style?

没有。以以下任何字符开头的函数都是运算符:/、=、-、+、!、*、%、<、>、&、|、^、? 或 ~1.一个运算符也可以由多个字符组成,但它必须以这些字符之一开头。

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

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

/56

但是这个声明不起作用,因为 a 不是运算符必须开始的字符之一:

prefix operator a {}

1其实字数比较多。阅读 here.