相关疑难解决方法(0)

Rust支持类似Ruby的字符串插值吗?

在Ruby中,我可以做到这一点.

aaa = "AAA"
bbb = "BBB #{aaa}"

puts(bbb)

> "BBB AAA"
Run Code Online (Sandbox Code Playgroud)

这种语法的重点是消除重复,并使其感觉像一个shell脚本 - 非常适合繁重的字符串操作.

Rust支持这个吗?或者有计划支持这个?或者有一些可以模仿的功能?

string-interpolation rust

22
推荐指数
3
解决办法
6248
查看次数

如何将格式化字符串附加到现有String?

使用format!,我可以创建一个String格式字符串,但如果我已经有一个String我想要附加的内容呢?我想避免分配第二个字符串只是为了复制它并丢弃分配.

let s = "hello ".to_string();
append!(s, "{}", 5); // Doesn't exist
Run Code Online (Sandbox Code Playgroud)

与C/C++相当的近似值snprintf.

string-formatting rust

22
推荐指数
1
解决办法
1487
查看次数

如何随机选择格式字符串

有时,程序可以通过多种方式将包含动态值的消息短语发送给其用户.例如:

  • "剩下{}分钟."
  • "你需要在不到{}分钟内完成."

并非所有消息都包含仅作为前缀或后缀的值.在动态语言中,这似乎是字符串格式化的逻辑任务.

对于不希望重复性的媒体(例如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!将是首选解决方案.

random string-formatting rust

3
推荐指数
1
解决办法
98
查看次数

如何格式化这样的字符串?

static TEST: &str = "test: {}";

fn main() {
    let string = format!(TEST, "OK");
    println!("{}", string);
}
Run Code Online (Sandbox Code Playgroud)

我想构造字符串“test: OK”,但这不起作用。我该怎么做?

rust rustfmt

2
推荐指数
1
解决办法
182
查看次数