fn main() {
let (.., x, y) = (0, 1, ..);
print!("{}", b"066"[y][x]);
}
脫糖
rust
中有很多糖,有些甚至我們也無法判斷它是不是糖。
但是我們需要知道一些自動化
的對稱,比如一些糖的外觀和實際的替換。
正如實現了Add
的結構可以透過+
進行運算,實現BitAnd
可以&
。
還有match
中的_
其實是WildCard
匹配。
還有本題中的..
也可以是RangFull
。匹配
match
需要關注兩個點:資料和模式。
左邊的是匹配的模式,可以提取資料。
右邊的是資料,根據不同的模式可以取出對應的值。
不過最為特殊的情況是,有些資料本身就可以作為匹配的模式,比如..
。string
rust
中的字串的確令人眼花繚亂,讓人深感頭大。
不過也無需考慮string
的編解碼了,因為rust
中的string
固定就是utf-8
編碼。
都知道string
的底層是[u8;N]
,為了方便操作string
,還有一些特殊的string
。
這裡都詳細描述了。
其中比較不同的是b"string"
,看起來是直白的字串,但實際上只是單純的[u8;N]
。
這是簡單的直接的ASCII
的字串宣告。..
上面也說了RangeFull
,這裡說一下slice
。
就是對底層陣列的區間範圍索引取值,這就是為什麼總是把slice
叫做view
。[?]
:單個索引的情況,就是直接取出對應索引的值。[..]
:範圍索引,取出對應部分的值,也是我們建立切片的手段。
- 匹配
第一個let (.., x, y) = (0, 1, ..);
..
在模式項中,表達的是任意匹配,因此,其中x
和y
對應的取值就是元組資料中的最後兩個。 x
:1
y
:..
第二個..
也就是y
的值,就是RangeFull,看起來讓人摸不著頭腦。
不過它就是一個具體的物件,能當做匹配項的一個物件。
字元
b"066"
,這裡其實其實是一個ASCII
編碼字元,是一個[u8;N]
。
查表以後不難得出具體的數值[48, 54, 54]
。切片
至此,我們解讀一下b"066"[y]
,經過上述的解釋,它可以轉化為[48,54,54][..]
。
結果不言而喻,我們的到了一個切片[48,54,54]
。取值
整體計算一下b"066"[y][x]
,得到[48,54,54][..][1]
。
切片之後取值,得到的是54
。
因此,整體答案就是列印54
。
本作品採用《CC 協議》,轉載必須註明作者和本文連結