Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
770 views
in Technique[技术] by (71.8m points)

rust - What is the difference between println's format styles?

I'm so sorry to ask such a simple question... A day ago, I started learning Rust and tried the println! method.

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

And then, I found other format styles: {}, {:}, {:?}, {?}, ...

I know that {} is instead String, but I don't understand the other format style. How do those styles differ from each other? I think {:?} is array or vector. Is it correct?

Please explain these format style with sample code :(

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

For thoroughness, the std::fmt formatting syntax is composed of two parts:

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

where:

  • <position-or-name> can be the argument position: println!("Hello {0}!", "world");`, note that it is checked at compile-time
  • <position-or-name> can also be a name: println!("Hello {arg}!", arg = "world");
  • <format> is one of the following formats, where each format requires the argument to implement a specific trait, checked at compile-time

The default, in the absence of position, name or format, is to pick the argument matching the index of {} and to use the Display trait. There are however various traits! From the link above:

  • nothing ? Display
  • ? ? Debug
  • o ? Octal
  • x ? LowerHex
  • X ? UpperHex
  • p ? Pointer
  • b ? Binary
  • e ? LowerExp
  • E ? UpperExp

and if necessary new traits could be added in the future.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...