猿问

什么是符文?

runeGo 中的a是什么?


我一直在谷歌搜索,但 Golang 只在一行中说:rune是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)

}

我知道这是映射rune到string以便它可以返回交换的字符串。但我不明白,究竟是如何rune或byte在这里工作。


梦里花落0921
浏览 342回答 3
3回答

holdtom

符文文字只是 32 位整数值(但它们是无类型常量,因此它们的类型可以改变)。它们代表 unicode 代码点。例如,符文文字'a'实际上是数字97。因此,您的程序几乎相当于:package mainimport "fmt"func SwapRune(r rune) rune {&nbsp; &nbsp; switch {&nbsp; &nbsp; case 97 <= r && r <= 122:&nbsp; &nbsp; &nbsp; &nbsp; return r - 32&nbsp; &nbsp; case 65 <= r && r <= 90:&nbsp; &nbsp; &nbsp; &nbsp; return r + 32&nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; return r&nbsp; &nbsp; }}func main() {&nbsp; &nbsp; fmt.Println(SwapRune('a'))}很明显,如果您查看 Unicode 映射,它与该范围内的ASCII相同。此外,32 实际上是字符的大写和小写代码点之间的偏移量。所以通过添加32到'A',你得到'a',反之亦然。

万千封印

我试图保持我的语言简单,以便外行理解rune。符文是一个字符。就是这样。它是单个字符。它是来自世界任何地方任何语言的任何字母表中的字符。要获取我们使用的字符串double-quotes&nbsp;""或者back-ticks&nbsp;``字符串不同于符文。在符文中我们使用single-quotes&nbsp;''现在符文也是...的别名int32...呃什么?rune 是别名的原因int32是因为我们看到使用如下编码方案每个字符都映射到某个数字,因此它就是我们要存储的数字。例如,a映射到97,当我们存储该数字时,它只是数字,因此 rune 是 int32 的别名。但不仅仅是任何数字。它是一个包含 32 个“零和一个”或“4”字节的数字。(注:UTF-8 为 4 字节编码方案)符文与弦有什么关系?字符串是符文的集合。在以下代码中:&nbsp; &nbsp; package main&nbsp; &nbsp; import (&nbsp; &nbsp; &nbsp; &nbsp; "fmt"&nbsp; &nbsp; )&nbsp; &nbsp; func main() {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println([]byte("Hello"))&nbsp; &nbsp; }我们尝试将字符串转换为字节流。输出是:[72 101 108 108 111]我们可以看到组成该字符串的每个字节都是一个符文。
随时随地看视频慕课网APP

相关分类

Go
我要回答