2017-04-13 3 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); 
} 

Zuordnung R zu add(2, 2) funktioniert nicht. Ich muss in der Lage sein, R von add -> mul -> sub zuzuweisen, die z2 zurückgibt.Wenn eine Funktion von einer anderen Funktion abhängt, wie kann ich dem Endprodukt eine Variable zuweisen?

Also ist der Prozess add(2, 2) ->mul(4, 2) ->sub(8, 2) also R = 6. Wie gehe ich dabei vor?

Dies ist der Fehler, den ich bekommen:

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

Ich entschuldige mich für die Formatierung –

+0

Oh, ich habe vergessen, die Fehlermeldung hinzuzufügen. Ich habe es gerade hinzugefügt. –

+0

Welchen Typ gibt 'sub' zurück? Was ist mit 'hinzufügen'? Woher weißt du die Antwort? Wie funktioniert der Compiler? – Shepmaster

Antwort

3

Es scheint mir, dass Sie über die Syntax von Rückgabetypen von Funktionen verwechselt werden. Der Code kompiliert perfekt nach ein paar kleineren Änderungen:

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 
} 

Beachten Sie, dass der Rückgabetyp aller Funktionen jetzt i32 ist. Die Rückgabe fn() bedeutet etwas völlig anderes und macht in diesem Fall keinen Sinn. Außerdem habe ich die Semikolons am Ende von add und mul entfernt, damit Rust weiß, dass es sich um die Rückgabewerte handelt.

+0

Danke für die Antwort. Meine Frage ist, ist es möglich, eine Variable wie folgt zuzuweisen: let Summe = addieren (2,2) und 6 bekommen? Mit anderen Worten, kann ich sum = z2 bekommen. Ich bekomme einen nicht übereinstimmenden Typfehler, der fn() erwartet -> i32 –

+0

Vielleicht vergisst du ein ';' nach 'let sumum = add (2,2)'? – aochagavia

Verwandte Themen