围棋中的符文是什么?
我一直在谷歌,但Golang只说了一行:符文是int32的别名。
但是为什么整数会像交换一样被广泛使用呢?
下面是一个函数交换案例。
所有的<=和-是什么?
为什么switch没有参数呢?
&&应该表示和,但是r <= 'z'是什么?
func SwapRune(r rune) rune {
switch {
case 'a' <= r && r <= 'z':
return r - 'a' + 'A'
case 'A' <= r && r <= 'Z':
return r - 'A' + 'a'
default:
return r
}
}
其中大部分来自http://play.golang.org/p/H6wjLZj6lW
func SwapCase(str string) string {
return strings.Map(SwapRune, str)
}
我明白这是映射符文到字符串,以便它可以返回交换的字符串。但我不明白符文或字节在这里是如何工作的。
我没有足够的声誉在fabrizioM的答案上发表评论,所以我只能在这里发表。
法布里齐奥的回答在很大程度上是正确的,他当然抓住了问题的本质——尽管必须加以区分。
字符串不一定是一系列符文。它是一个“字节切片”的包装器,切片是一个Go数组的包装器。这又有什么区别呢?
一个符文类型必须是一个32位的值,这意味着符文类型的值序列必须有一定数量的位x*32。字符串是一个字节序列,长度为x*8位。如果所有字符串实际上都是Unicode,那么这种差异将没有影响。然而,由于字符串是字节的切片,Go可以使用ASCII或任何其他任意字节编码。
然而,字符串字面量必须写入以UTF-8编码的源文件中。
信息来源:http://blog.golang.org/strings
来自Go lang发布说明:http://golang.org/doc/go1#rune
符文是一种类型。它占用32位,用于表示Unicode代码点。
作为一个类比,用“ASCII”编码的英语字符集有128个码位。这样就可以装进一个字节(8位)。根据这个(错误的)假设,C将字符视为'bytes' char,将'strings'视为'sequence of characters' char*。
但你猜怎么着。除了abcde,人类还发明了许多其他的符号。的符号。有太多了,我们需要32位来编码它们。
在golang中,字符串是一个字节序列。然而,由于多个字节可以表示一个符文代码点,字符串值也可以包含符文。所以,它可以转换为[]符文,反之亦然。
unicode包http://golang.org/pkg/unicode/可以让你体验到挑战的丰富程度。
我没有足够的声誉在fabrizioM的答案上发表评论,所以我只能在这里发表。
法布里齐奥的回答在很大程度上是正确的,他当然抓住了问题的本质——尽管必须加以区分。
字符串不一定是一系列符文。它是一个“字节切片”的包装器,切片是一个Go数组的包装器。这又有什么区别呢?
一个符文类型必须是一个32位的值,这意味着符文类型的值序列必须有一定数量的位x*32。字符串是一个字节序列,长度为x*8位。如果所有字符串实际上都是Unicode,那么这种差异将没有影响。然而,由于字符串是字节的切片,Go可以使用ASCII或任何其他任意字节编码。
然而,字符串字面量必须写入以UTF-8编码的源文件中。
信息来源:http://blog.golang.org/strings