0

私はこのコードを書きました:

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};

でコンパイルするとcargo build、次のエラーが発生します。

error[E0308]: if and else have incompatible types
 --> src/main.rs:6:9
  |
3 |       let y = if x == 5 {
  |  _____________-
4 | |         10
  | |         -- expected because of this
5 | |     } else {
6 | |         println!("shapoopoy");
  | |         ^^^^^^^^^^^^^^^^^^^^^^ expected integer, found ()
7 | |     };
  | |_____- if and else have incompatible types
  |
  = note: expected type `{integer}`
             found type `()`

余談ですが、Rust を学習した後にプロジェクトに取り組む予定がある場合、安定版リリースを使用する必要がありますか? 古いバージョンを使用する場合、作成するプログラムに Rust を含める方法がわかりません。

4

1 に答える 1

3

サンプルコードを見てみましょう:

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
};

種類は何でしょうy?最初の分岐は何らかの整数変数 (u8または などi32) として解決されますが、2 番目の分岐は の戻り値の型として解決されます。println!これは()です。これらの両方の型を 1 つのスペースに格納することはできないため、コンパイラは文句を言います。

両方のブランチが同じタイプに解決される必要があります - そしてそれはあなたがする必要があること次第です。何も返さず、変数を副作用として設定できます。

let x = 5;
let y;

if x == 5 {
    y = 10;
} else {
    println!("shapoopoy");
}

または、両方の分岐で整数を返します。

let x = 5;
let y = if x == 5 {
    10
} else {
    println!("shapoopoy");
    42
};

古いバージョンを使用する場合、作成するプログラムに Rust を含める方法がわかりません。

Rust はコンパイル済み言語です。コンパイルされたバイナリを配布する場合、Rust を「含める」必要はまったくありません。安定したバージョンを選択すると、いつでもそのバージョンの Rust に固定してコンパイルできます。

于 2015-03-22T22:10:13.130 に答える