一尘不染

什么是符文?

go

什么是runeGo?

我一直在谷歌搜索,但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以便它可以返回交换后的字符串。但我不明白,究竟是如何runebyte在这里工作。


阅读 402

收藏
2020-07-02

共1个答案

一尘不染

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

2020-07-02