Go におけるとは何ですかrune
?
グーグルで調べたのですが、Golangrune
には は のエイリアスであるint32
と 1 行だけ書かれています。
しかし、大文字と小文字を入れ替えるなど、整数があらゆるところで使用されているのはなぜでしょうか?
以下は関数 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
ベストアンサー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マッピングを見れば、それが明らかになるはずです。アスキーその範囲内です。さらに、32 は実際には文字の大文字と小文字のコードポイント間のオフセットです。したがって、32
に を加えると'A'
になり'a'
、その逆も同様です。