[英]Rust literal function parameters
我一直試圖了解是否可以提供文字作為 function 參數類型。
這是我經常用 Typescript 做的事情,想知道在 rust 中是否有辦法做到這一點。 例如
function example(param: 1 | 2) { }
example(1); // OK
example(2); // OK
example(3); // Type Error
或者更好。
const FLAGS = {
a: 1,
b: 2,
} as const;
export type ValueOf<T> = T[keyof T];
function example(flag: ValueOf<typeof FLAGS>) {}
example(FLAGS.a); // OK
example(1); // OK
example(FLAGS.b); // OK
example(2); // OK
example(3); // Type Error
這可以使用@David Fong的評論中所述的枚舉來完成。
rust 書中的示例。
enum Coin {
Penny,
Nickel,
Dime,
Quarter,
}
fn value_in_cents(coin: Coin) -> u8 {
match coin {
Coin::Penny => 1,
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter => 25,
}
}
我同意這里所有其他人所說的一切,所以我不會提供其他解決方案。 我想提供一些背景信息。
在這里區分編譯時已知的信息和運行時已知的信息很重要。
在 Javascript 中有點不同,因為編譯時和運行時之間的界限有點模糊,因為它是一種解釋性語言。 但是在Rust中,有硬切。
也就是說,正如其他人已經指出的那樣,大多數問題都可以通過枚舉來表達,枚舉是類型,因此在編譯時就知道了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.