在每晚的Rust中,不再可能将字符串文字指定为字符串with a "~" character。
例如,在C ++中,我使用user-defined literals来连接字符串文字,而不是每次都提到std::string
的外壳:
inline std::string operator"" _s (const char* str, size_t size) {return std::string (str, size);}
foo ("Hello, "_s + "world!");
Rust中是否存在类似的功能,以使字符串文字连接比String::from_str ("Hello, ") + "world!"
更少痛苦?
答案 0 :(得分:19)
如果你真的(哈)有字符串文字,你可以使用concat!
宏:
let lit = concat!("Hello, ", "world!")
您可以将字符串本地拆分为多行:
let lit = "Hello, \
World";
\
消耗以下所有空格,包括下一行的前导空格;省略\
将包括字符串数据" verbatim",带有换行符和前导空格等。
您可以将&str
添加到String
:
let s = "foo".to_string() + "bar" + "baz";
您可以迭代地使用push_str
:
let mut s = "foo".to_string();
s.push_str("bar");
s.push_str("baz");
您可以使用SliceConcatExt::concat
:
let s = ["foo", "bar", "baz"].concat();
如果所有其他方法都失败了,您可以定义一个宏来完全按照自己的意愿行事。
另见:
答案 1 :(得分:13)
您可以使用format!
宏。它更具可读性,更易于翻译,更高效,更强大(您可以连接不仅仅是字符串,就像C ++的ostringstream
一样)。它也是完全类型安全的。
format!("Hello, {}", "world!")
您还可以使用命名参数来提高可读性。
format!("hello, {who}", who = "world")
std::fmt
中描述了完整的格式化语法。
Rust没有用户定义的文字。我认为添加这样的功能是向后兼容的,所以也许这个功能将在Rust 1.0之后添加。
答案 2 :(得分:1)