2016-06-12 25 views
1

Ich bin dabei, eine Zeichenfolge abhängig von dem gegebenen Argument zurückzugeben.Wie erstelle ich einen formatierten String aus einem Literal in Rust?

fn hello_world(name:Option<String>) -> String { 
    if Some(name) { 
     return String::formatted("Hello, World {}", name); 
    } 
} 

Dies ist eine nicht verfügbar zugehörige Funktion! - Ich wollte klar machen, was ich tun möchte. Ich habe das Dokument bereits durchsucht, konnte aber keine String-Builder-Funktionen oder ähnliches finden.

Antwort

4

Verwenden Sie die format! macro:

fn hello_world(name: Option<&str>) -> String { 
    match name { 
     Some(n) => format!("Hello, World {}", n), 
     None => format!("Who are you?"), 
    } 
} 

In Rust, Strings Formatierung verwendet das Makro-System, da das Format Argument bei der Kompilierung typechecked werden, die durch eine Verfahren Makro umgesetzt wird.

Es gibt noch andere Probleme mit Ihrem Code:

  1. Sie geben nicht, was für ein None zu tun - man kann nicht einfach „nicht bestanden“ einen Wert zurückgeben.
  2. Die Syntax für if ist falsch, Sie möchten if let Muster übereinstimmen.
  3. Stilistisch möchten Sie implizite Renditen verwenden, wenn es am Ende des Blocks ist.
  4. In viele (aber nicht alle) Fälle, möchten Sie eine &str statt einer String akzeptieren.