什么是符文?

新手上路,请多包涵

Go 中的 rune 是什么?

我一直在谷歌搜索,但 Golang 只在一行中说: _runeint32 的别名_。

但是为什么整数像交换大小写一样到处使用呢?

下面是一个函数 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)
}

我知道这是映射 runestring 以便它可以返回交换的字符串。但我不明白 runebyte 在这里是如何工作的。

原文由 user2671513 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 529
2 个回答

Rune 文字只是 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' ,反之亦然。

原文由 topskip 发布,翻译遵循 CC BY-SA 4.0 许可协议

来自 Go lang 发行说明:http: //golang.org/doc/go1#rune

符文是一种类型。它占用 32 位,代表一个 Unicode 代码点。作为类比,以“ASCII”编码的英文字符集有 128 个代码点。因此能够容纳在一个字节(8 位)内。根据这个(错误的)假设,C 将字符视为“字节” char ,将“字符串”视为“字符序列” char*

但猜猜怎么了。除了“abcde..”符号之外,人类还发明了许多其他符号。而且有太多我们需要 32 位来编码它们。

在 golang 中,a stringbytes 的序列。但是,由于多个字节可以表示一个符文代码点,因此字符串值也可以包含符文。因此,它可以转换为 []rune ,反之亦然。

unicode 包 http://golang.org/pkg/unicode/ 可以让你领略挑战的丰富性。

原文由 fabrizioM 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题