62

Rust は Go のように複数の値を返す関数をネイティブにサポートしていますか?

func addsub(x, y int) (int, int) {
    return x + y, x - y
}

タプルを使用してシミュレートできるようです。Rosetta Codeでは、異なる言語で複数の値を返す方法が紹介されていますが、Rust は見当たりませんでした。

4

4 に答える 4

83

これは私のために働く:

fn addsub(x: isize, y: isize) -> (isize, isize) {
    (x + y, x - y)
}

基本的には Go と同じですが、括弧が必要です。

于 2013-08-29T17:09:46.140 に答える
31

Rust では、複数の値を持つタプルを返すことができます。

fn my_func() -> (u8, bool) {
    (1, true)
}

値以上を返す言語は、おそらくタプルまたは別のデータ構造でこれをエミュレートしています。ほとんどの呼び出し規約では、戻り値は 1 つのレジスタにのみあるためです。

Goについてはわかりませんが、タプル内の複数の値をエミュレートしているだけで、コンパイル時に戻り値を管理する必要がある可能性が高くなります。

これは OCaml や Haskell (およびその他) がこれを管理する方法であり、戻り値 (またはタプル) で型チェックを強制するため、何か問題が発生する可能性は低いため、錆がこれを行うことに問題はありません。戻り値を管理する最も一般的な方法は、2 つ以上のバインディングでタプルを分解することです ( let (a, b) = tuple_2();)。

ほんの 2 セントです。お気軽に訂正してください。

于 2013-08-28T06:07:14.360 に答える
20

戻りタプルを個別の変数に簡単に割り当てる方法を示す例を次に示します。

fn addsub(x: isize, y: isize) -> (isize, isize) {
    (x + y, x - y) // use tuple to simulate it
}

let (a, b) = addsub(1, 2);
于 2018-07-11T05:48:33.427 に答える