Rustは、Goなどの複数の値を返す関数をネイティブでサポートしていますか?
func addsub(x, y int) (int, int) {
return x + y, x - y
}
タプルを使用してシミュレーションできるようです。 ロゼッタコード は、異なる言語で複数の値を返す方法を紹介しますが、Rustは表示されませんでした。
これは私にとってはうまくいきます:
fn addsub(x: isize, y: isize) -> (isize, isize) {
(x + y, x - y)
}
基本的にはGoと同じですが、括弧が必要です。
Rustでは、複数の値を持つタプルを返すことができます:
_fn my_func() -> (u8, bool) {
(1, true)
}
_
ほとんどの呼び出し規約では戻り値は1つのレジスタにしか存在しないため、値よりも多くを返す言語は、タプルまたは別のデータ構造でこれをエミュレートしている可能性があります。
Goについてはわかりませんが、タプル内の複数の値をエミュレートし、コンパイル時に強制的に戻り値を管理している可能性が高いです。
RustこれはOCamlまたはHaskell(および他の人)がそれを管理する方法であり、それらが戻り値(またはタプル)で型チェックを実施するため、何かを行う可能性があるため)戻り値を管理する最も一般的な方法は、2つ以上のバインディングでタプルを分解することです(let (a, b) = Tuple_2();
)。
ちょうど私の2セント、私を修正してお気軽に。
Rustでは、returnキーワードを使用する必要はありません:
fn addsub(x: isize, y:isize) -> (isize, isize) {
(x + y, x - y) // use Tuple to simulate it
}
以下は、戻りタプルを個別の変数に簡単に割り当てる方法を示す例です。
fn addsub(x: isize, y: isize) -> (isize, isize) {
(x + y, x - y) // use Tuple to simulate it
}
let (a, b) = addsub(1, 2);