2017-04-13 8 views
-1
fn add(x: i32, y: i32) -> fn() { 
    let z = x + y; 
    mul(z, 2); 
} 

fn mul(x1: i32, y1: i32) -> fn() { 
    let z1 = x1 * y1; 
    sub(z1, 2); 
} 

fn sub(x2: i32, y2: i32) -> (i32) { 
    let z2 = x2 - y2; 
    z2 
} 

fn main() { 
    let R = add(2, 2); 
    println!("{}", R); 
} 

R~add(2, 2)を割り当てることはできません。 z2を返すadd - > mul - > subからRを割り当てる必要があります。関数が別の関数に依存する場合、最終製品にどのように変数を割り当てることができますか?

したがって、プロセスはadd(2, 2) - >mul(4, 2) - >sub(8, 2)となり、R = 6となります。これを行うにはどうすればいいですか?

これは私が取得エラーです:

error[E0277]: the trait bound `fn(i32): std::fmt::Display` is not satisfied 
    --> testzz.rs:20:16 
    | 
20 | println!("{}", R); 
    |    ^the trait `std::fmt::Display` is not implemented for 
    `fn(i32)` 
    | 
= note: `fn(i32)` cannot be formatted with the default formatter; try using 
`:?` instead if you are using a format string 
    = note: required by `std::fmt::Display::fmt` 
+0

書式設定をお詫び申し上げます –

+0

私はエラーメッセージを追加するのを忘れていました。私は今それを追加しました。 –

+0

'sub'はどんなタイプを返しますか? 'add'はどうでしょうか?これに対する答えはどうやって分かりますか?コンパイラはどうですか? – Shepmaster

答えて

3

あなたが関数の戻り値の型の構文について混乱しているように私には思えます。コードは細部の編集のカップルの後に完全にコンパイルされます。すべての関数の戻り値の型が今i32ある

fn add(x: i32, y: i32) -> i32 { 
    let z = x + y; 
    mul(z, 2) 
} 

fn mul(x1: i32, y1: i32) -> i32 { 
    let z1 = x1 * y1; 
    sub(z1, 2) 
} 

fn sub(x2: i32, y2: i32) -> i32 { 
    let z2 = x2 - y2; 
    z2 
} 

注こと。返すfn()は、まったく別のものを意味し、この場合意味をなさない。また、addmulの最後のセミコロンも削除しましたので、Rustはそれらが戻り値であることを認識しています。

+0

返事をありがとう。私の質問は、変数を次のように割り当てることです: let sum = add(2,2)と6を得る?つまり、sum = z2を得ることができます。 fn() - > i32のような不一致の型エラーが発生する –

+0

'let sum = add(2,2)'の後に ';'を忘れているのでしょうか? – aochagavia

関連する問題