Swift 为什么中缀是默认值

Swift 为什么中缀是默认值,swift,infix-notation,Swift,Infix Notation,我正在读斯威夫特杂志 基本功能: 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 {

我正在读斯威夫特杂志

基本功能:

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+
我不明白中缀怎么会被认为是默认值。在我看来,它与普通函数声明没有什么不同


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

如果我正确回答了您的问题,我想答案是:您正在重载现有运算符

假设我们使用自定义运算符,我需要声明前缀/中缀/后缀

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

比如:


如果我答对了你的问题,我想答案是:你正在重载现有的操作符

假设我们使用自定义运算符,我需要声明前缀/中缀/后缀

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

比如:


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

例如,指定运算符中允许的字符


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

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

例如,指定运算符中允许的字符

更具体地说,令牌中的第一个字符是决定性字符

我不明白中缀怎么会被认为是默认值

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

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

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

这是否意味着不允许使用单字符函数?swift中的任何两个参数函数都可以称为中缀样式吗

不可以。以这些字符中的任何一个字符开头的函数是运算符:/、=、-、+、!、*、%、&、|、^、?,或~1。运算符也可以由多个字符组成,但必须以其中一个字符开头

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

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

/56
但是,此声明不起作用,因为a不是运算符必须使用的字符之一:

prefix operator a {}
1实际上还有更多的字符。阅读

我不明白中缀怎么会被认为是默认值

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

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

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

这是否意味着不允许使用单字符函数?swift中的任何两个参数函数都可以称为中缀样式吗

不可以。以这些字符中的任何一个字符开头的函数是运算符:/、=、-、+、!、*、%、&、|、^、?,或~1。运算符也可以由多个字符组成,但必须以其中一个字符开头

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

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

/56
但是,此声明不起作用,因为a不是运算符必须使用的字符之一:

prefix operator a {}

1实际上还有更多的字符。阅读。

有时候,要真正理解编程语言中的某些东西,你需要去了解一下编译器。在这种情况下,什么是词法分析,什么是语法分析。为了获得真正全面的知识,最好学习词法分析和编译器。我想参加一个编译器课程。现在,只要知道如果函数名是一个运算符并且有两个参数,中缀就是一个可派生的默认值就足够了。自定义运算符需要一个定义,所以这仍然有效。有时,要真正理解编程语言中的某些内容,您需要去了解一下编译器。在这种情况下,什么是词法分析,什么是语法分析。为了获得真正全面的知识,最好学习词法分析和编译器。我想参加一个编译器课程。现在,只要知道如果函数名是一个运算符并且有两个参数,中缀就是一个可派生的默认值就足够了。自定义运算符需要一个定义,所以这仍然有效。很好的答案。我忽略了这样一个事实:操作符是预定义的,如果你想要新的,你必须使用它们。现在一切都有意义了。Tha
谢谢,回答得很好。我忽略了这样一个事实:操作符是预定义的,如果你想要新的,你必须使用它们。现在一切都有意义了。非常感谢。