【发布时间】:2016-09-11 14:37:23
【问题描述】:
有时,程序可以通过多种方式向用户发送包含动态值的消息。例如:
- “还剩{} 分钟。”
- “您需要在 {} 分钟内完成。”
并非所有消息都包含仅作为前缀或后缀的值。在动态语言中,这似乎是字符串格式化的逻辑任务。
对于不希望出现重复性的媒体(例如 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))
}
应该是:
- 对于作者来说很乏味,因为每次都要输入
format!(/*...*/, x)。 - 浪费内存+时钟周期,因为在选择一个之前,每一个可能性都是完全生成的,而丢弃其他的。
有没有办法避免这些缺点?
如果不是为了格式字符串的编译时评估,返回随机选择的&'static str(来自静态切片)以传递到format! 的函数将是首选解决方案。
【问题讨论】:
-
您是否考虑过随机生成一个数字并使用
match来选择要格式化的字符串?它将避免生成所有字符串然后将它们丢弃。
标签: random rust string-formatting