在Ruby中,我可以做到这一点.
aaa = "AAA"
bbb = "BBB #{aaa}"
puts(bbb)
> "BBB AAA"
Run Code Online (Sandbox Code Playgroud)
这种语法的重点是消除重复,并使其感觉像一个shell脚本 - 非常适合繁重的字符串操作.
Rust支持这个吗?或者有计划支持这个?或者有一些可以模仿的功能?
使用format!
,我可以创建一个String
格式字符串,但如果我已经有一个String
我想要附加的内容呢?我想避免分配第二个字符串只是为了复制它并丢弃分配.
let s = "hello ".to_string();
append!(s, "{}", 5); // Doesn't exist
Run Code Online (Sandbox Code Playgroud)
与C/C++相当的近似值snprintf
.
有时,程序可以通过多种方式将包含动态值的消息短语发送给其用户.例如:
并非所有消息都包含仅作为前缀或后缀的值.在动态语言中,这似乎是字符串格式化的逻辑任务.
对于不希望重复性的媒体(例如Slack频道),有很多不同的措辞,使用以下内容产生每个最终String
输出:
pub fn h(x: usize) -> String {
rand::sample(rand::thread_rng(), vec![
format!("{} minutes remain.", x),
format!("Hurry up; only {} minutes left to finish.", x),
format!("Haste advisable; time ends in {}.", x),
/* (insert many more elements here) */
], 1).first().unwrap_or(format!("{}", x))
}
Run Code Online (Sandbox Code Playgroud)
将会:
format!(/*...*/, x)
.有没有办法避免这些缺点?
如果不是格式字符串的编译时评估,则返回随机选择&'static str
(从静态片)传入的函数format!
将是首选解决方案.
static TEST: &str = "test: {}";
fn main() {
let string = format!(TEST, "OK");
println!("{}", string);
}
Run Code Online (Sandbox Code Playgroud)
我想构造字符串“test: OK”,但这不起作用。我该怎么做?