簡體   English   中英

如何定義接受普通字符集子集的自定義字符類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM