[英]How to define custom char type that accepts a subset of the normal charset
我正在嘗試定義一種自定義類型的 char ,它只接受來自AZ
的值。 現在我只是在我的類型中使用一個普通的字符:
struct Rotor {
cipher: &'static str,
notch: &'static [char],
position: char, // Only valid values are A-Z
}
這是一個在這個結構上定期調用的方法
fn rotate(&mut self) {
match self.position /* E0004 on this line */ {
'A'..='Y' => self.position = (self.position as u8 + 1) as char,
'Z' => self.position = 'A',
}
}
我的 rotate 方法中的 match 語句給了我編譯器錯誤E0004: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms
如果我可以有一個自定義 char 類型,它只有值AZ
可能會消除這個錯誤。 我考慮過使用以下模式: const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
但我不知道如何讓它與結構定義一起工作
我知道,如果我只是在這個 match 語句中添加了一個包羅萬象的_
手臂,那不會是世界末日,但我更願意不必這樣做
Rust 不支持范圍整數(至少目前是這樣),因此您無法定義自己的字符類型並讓編譯器強制使用它。 您必須使用通配符。 順便說一句,如果你只需要A
- Z
,你可以使用更小更高效的u8
。
您可以使用新類型包裝器並讓構造函數強制執行值的有效性。 這對match
沒有幫助,但有助於防止錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.