为什么 `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.
我正在阅读 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.