簡體   English   中英

Rust 字面量 function 參數

[英]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,
    }
}

我同意這里所有其他人所說的一切,所以我不會提供其他解決方案。 我想提供一些背景信息。

在這里區分編譯時已知的信息和運行時已知的信息很重要。

  • 類型在編譯時是已知的,因此如果它們不正確,編譯器可以抱怨它們。
  • 值,即變量的內容,僅在運行時才知道。 因此編譯器不可能檢查它們。 您將永遠無法在編譯時將參數限制為 10 到 20 之間的值,因為這只是編譯器沒有的信息。

在 Javascript 中有點不同,因為編譯時和運行時之間的界限有點模糊,因為它是一種解釋性語言。 但是在Rust中,有硬切。

也就是說,正如其他人已經指出的那樣,大多數問題都可以通過枚舉來表達,枚舉是類型,因此在編譯時就知道了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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