gpt4 book ai didi

rust - 是否可以指定函数参数必须是字符串文字?

转载 作者:行者123 更新时间:2023-11-29 08:23:46 27 4
gpt4 key购买 nike

此片段拒绝编译,因为 format!() 不会触及非文字字符串。

fn cond_format<T: std::fmt::Display>(cond: bool, fmt_str: &'static str, item: T) -> String {
if cond {
format!(fmt_str, item)
} else {
format!("{}", item)
}
}

最佳答案

没有。宏在类型、名称或值存在之前就已展开。没有办法让它起作用。因此,语言没有理由在运行时区分文字和非文字:即使有,也没有任何东西能够使用该信息。

必须使用宏。以下是执行此操作的两种可行方法。

macro_rules! cond_format {
($fmt_str:expr) => {
|cond: bool, item| -> String {
if cond {
format!($fmt_str, item)
} else {
format!("{}", item)
}
}
};

($cond:expr, $fmt_str:expr, $item:expr) => {
if $cond {
format!($fmt_str, $item)
} else {
format!("{}", $item)
}
};
}

fn main() {
println!("{}", cond_format!("{:x}")(false, 42));
println!("{}", cond_format!(true, "{:x}", 42));
}

关于rust - 是否可以指定函数参数必须是字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43832868/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com