Struct alloc::fmt::Arguments

1.0.0 · source ·
pub struct Arguments<'a> { /* private fields */ }
Expand description

该结构体表示格式字符串及其参数的安全预编译版本。 由于无法安全地完成此操作,因此无法在运行时生成该文件,因此未提供任何构造函数,并且该字段为私有字段以防止修改。

format_args! 宏将安全地创建此结构体的实例。 宏在编译时验证格式字符串,因此可以安全地执行 write()format() 函数的使用。

您可以在 DebugDisplay 上下文中使用 format_args! 返回的 Arguments<'a>,如下所示。 该示例还显示 DebugDisplay 的格式相同: format_args! 中的插值格式字符串。

let debug = format!("{:?}", format_args!("{} foo {:?}", 1, 2));
let display = format!("{}", format_args!("{} foo {:?}", 1, 2));
assert_eq!("1 foo 2", display);
assert_eq!(display, debug);
Run

Implementations§

source§

impl<'a> Arguments<'a>

1.52.0 (const: unstable) · source

pub fn as_str(&self) -> Option<&'static str>

获取格式化后的字符串,如果它没有要在运行时格式化的参数。

在某些情况下,这可用于避免分配。

Guarantees

对于 format_args!("just a literal"),这个函数保证返回 Some("just a literal")

对于大多数带有占位符的情况,这个函数将返回 None

但是,编译器可能会执行优化,即使格式字符串包含占位符,也会导致此函数返回 Some(_)。 例如,format_args!("Hello, {}!", "world") 可能被优化为 format_args!("Hello, world!"),这样 as_str() 返回 Some("Hello, world!")

除了微不足道的情况 (没有占位符) 之外的任何行为都不能得到保证,并且除了优化之外不应依赖于任何其他行为。

Examples
use std::fmt::Arguments;

fn write_str(_: &str) { /* ... */ }

fn write_fmt(args: &Arguments<'_>) {
    if let Some(s) = args.as_str() {
        write_str(s)
    } else {
        write_str(&args.to_string());
    }
}
Run
assert_eq!(format_args!("hello").as_str(), Some("hello"));
assert_eq!(format_args!("").as_str(), Some(""));
assert_eq!(format_args!("{:?}", std::env::current_dir()).as_str(), None);
Run

Trait Implementations§

source§

impl<'a> Clone for Arguments<'a>

source§

fn clone(&self) -> Arguments<'a>

返回值的副本。 Read more
source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
source§

impl Debug for Arguments<'_>

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error>

使用给定的格式化程序格式化该值。 Read more
source§

impl Display for Arguments<'_>

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error>

使用给定的格式化程序格式化该值。 Read more
1.71.0 · source§

impl ToString for Arguments<'_>

source§

fn to_string(&self) -> String

将给定值转换为 StringRead more
source§

impl<'a> Copy for Arguments<'a>

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Arguments<'a>

§

impl<'a> !Send for Arguments<'a>

§

impl<'a> !Sync for Arguments<'a>

§

impl<'a> Unpin for Arguments<'a>

§

impl<'a> !UnwindSafe for Arguments<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

获得所有权后的结果类型。
source§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常是通过克隆。 Read more
source§

fn clone_into(&self, target: &mut T)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

将给定值转换为 StringRead more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

发生转换错误时返回的类型。
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

发生转换错误时返回的类型。
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。