rune
Go中的 a 是什么?
我一直在谷歌搜索,但 Golang 只在一行中说: rune
是int32
.
但是整数怎么会像交换案例一样到处使用呢?
下面是一个函数swapcase。什么是<=
和-
?
为什么没有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)
}
我知道这是映射rune
到,string
以便它可以返回交换的字符串。但我不明白这里究竟是如何工作rune
的byte
。
符文文字只是 32 位整数值 ( 但是它们是无类型常量,因此它们的类型可以改变 )。它们代表 unicode
代码点。例如,符文文字'a'
实际上是数字97
。
因此,您的程序几乎等同于:
package main
import "fmt"
func SwapRune(r rune) rune {
switch {
case 97 <= r && r <= 122:
return r - 32
case 65 <= r && r <= 90:
return r + 32
default:
return r
}
}
func main() {
fmt.Println(SwapRune('a'))
}
如果您要查看 Unicode
映射,这应该很明显,它与该范围内的ASCII相同。此外,32
实际上是字符的大写和小写代码点之间的偏移量。因此,通过添加32
,'A'
您会得到'a'
,反之亦然。