2016-10-18 21 views
5

Bu kadar basit bir soru sorduğum için çok üzgünüm ... Bir gün önce Rust'u öğrenmeye başladım ve println! yöntemini denedim.println format formatları arasındaki fark nedir?

fn main() { 
    println!("Hello {}!", "world"); 
} 
-> Hello world! 

Ve sonra, diğer biçim stillerini bulundu: {}, {:}, {:?}, {?} ...

Ben {} yerine String olduğunu biliyorum ama başka biçimi stili anlamıyorum. Bu stiller birbirinden nasıl farklıdır? Bence {:?} dizi veya vektör. Doğru mu?

örnek kod :(

+4

https://doc.rust-lang.org/std/fmt/index.html sayfasına bakın ve burada http://stackoverflow.com/documentation/rust/362/hello-world/1248/advanced-usage- of-println – aSpex

+0

@aSpex Thx !! Bu benim istediğim! :) – kai

cevap

4

println!() bu biçim tarzını açıklayınız std::fmt syntax ve {} parametrelerini gösterir kullanan bir makrodur. Parantez boş bırakılırsa ({}), ilgili argüman Display özelliği uygulaması gerekmektedir onlar :? içeriyorsa ve Tartışmanın Debug uygulaması yerine kullanılması gerektiğini ifade eder.

alt satırda bunun parametreleri burada alakalı tipi, ancak the traits they implement olmamasıdır. örneğin, Vec için rs Debug uygulayın, ancak Display uygulamıyorlar ve bu nedenle {:?} sadece iyi çalışıyor iken {} kullanamazsınız. titizlik için

12

, std::fmt biçimlendirme söz dizimi, iki bölümden oluşmaktadır:

  • <position-or-name> bağımsız değişken pozisyonlar olabilir:

    {<position-or-name>:<format>} 
    

    println!("Hello {0}!", "dünya"); ', not bu

  • derleme zamanında denetlenir, ayrıca bir ad da olabilir: println!("Hello {arg}!", arg = "world");
  • <format> her biçim pozisyon, isim veya formatta yokluğunda derleme zamanında

varsayılan kontrol belirli özelliği, uygulamak bağımsız değişken gerektirir one of the following formats olduğu, dizinini eşleşen argümanı seçmektir {} ve Display özelliğini kullanmak için. Ancak çeşitli özellikler var!Yukarıdaki linke Gönderen:

  • şey Display
  • ? ⇒ Debug
  • o ⇒ Sekizli
  • x ⇒ LowerHex
  • X ⇒ UpperHex
  • p ⇒ Pointer
  • b ⇒ İkili ⇒
  • e ⇒ LowerExp
  • E ⇒ UpperExp

ve gerekli yeni özellikler gelecekte eklenebilir eğer.