在Ruby中,我可以做到这一点.
aaa = "AAA"
bbb = "BBB #{aaa}"
puts(bbb)
> "BBB AAA"
Run Code Online (Sandbox Code Playgroud)
这种语法的重点是消除重复,并使其感觉像一个shell脚本 - 非常适合繁重的字符串操作.
Rust支持这个吗?或者有计划支持这个?或者有一些可以模仿的功能?
我正在尝试连接静态字符串和字符串文字以构建另一个静态字符串.以下是我能想到的最好的,但它不起作用:
const DESCRIPTION: &'static str = "my program";
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
const VERSION_STRING: &'static str = concat!(DESCRIPTION, " v", VERSION);
Run Code Online (Sandbox Code Playgroud)
在Rust中有没有办法做到这一点,或者我必须一遍又一遍地写相同的文字?
在每晚的Rust中,不再可能将字符串文字指定为带有"〜"字符的 String .
例如,在C++中,我使用用户定义的文字连接字符串文字,而不是std::string每次都提到的外壳:
inline std::string operator"" _s (const char* str, size_t size) {return std::string (str, size);}
foo ("Hello, "_s + "world!");
Run Code Online (Sandbox Code Playgroud)
在Rust中是否存在类似的功能,以使字符串文字连接不那么痛苦String::from_str ("Hello, ") + "world!"?
我目前正在学习Rust(主要是从零开始),现在我想将两个字符串一起添加并打印出来.但这并不像其他语言那么容易.这是我到目前为止所做的(也经过测试print!):
fn sayHello(id: str, msg: str) {
println!(id + msg);
}
fn main() {
sayHello("[info]", "this is rust!");
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误有点奇怪.
error: expected a literal
--> src/main.rs:2:14
|
2 | println!(id + msg);
| ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题,这样生锈的[info]会被打印掉?
这样可行:
let hello = "Hello ".to_string();
let world = "world!";
let hello_world = hello + world;
Run Code Online (Sandbox Code Playgroud)
但这不是:
let hello = "Hello ".to_string();
let world = "world!".to_string();
let hello_world = hello + world;
Run Code Online (Sandbox Code Playgroud)
但这样做:
let hello = "Hello ".to_string();
let world = "world!".to_string();
let hello_world = hello + &world;
Run Code Online (Sandbox Code Playgroud)
那是因为String需要一个指向String第二个原始的指针String吗?如果是这样,为什么?
我本周开始使用Rust编程,我在理解Strings如何工作方面遇到了很多问题.
现在,我正在尝试制作一个简单的程序,打印附加订单的玩家列表(仅用于学习目的).
let res : String = pl.name.chars().enumerate().fold(String::new(),|res,(i,ch)| -> String {
res+=format!("{} {}\n",i.to_string(),ch.to_string());
});
println!("{}", res);
Run Code Online (Sandbox Code Playgroud)
这是我的想法,我知道我可以使用for循环,但目标是了解不同的Iterator函数.
所以,我的问题是字符串连接不起作用.
Compiling prueba2 v0.1.0 (file:///home/pancho111203/projects/prueba2)
src/main.rs:27:13: 27:16 error: binary assignment operation `+=` cannot be applied to types `collections::string::String` and `collections::string::String` [E0368]
src/main.rs:27 res+=format!("{} {}\n",i.to_string(),ch.to_string());
^~~
error: aborting due to previous error
Could not compile `prueba2`.
Run Code Online (Sandbox Code Playgroud)
我尝试使用&str但是不可能从i和它创建它们ch.
我不明白 Rust 如何处理字符串。我创建了一个带有两个字符串字段和一个方法的简单结构。此方法连接两个字段和参数中的字符串。我的代码:
fn main() {
let obj = MyStruct {
field_1: "first".to_string(),
field_2: "second".to_string(),
};
let data = obj.get_data("myWord");
println!("{}",data);
}
struct MyStruct {
field_1: String,
field_2: String,
}
impl MyStruct {
fn get_data<'a>(&'a self, word: &'a str) -> &'a str {
let sx = &self.field_1 + &self.field_2 + word;
&* sx
}
}
Run Code Online (Sandbox Code Playgroud)
运行时出现错误:
src\main.rs:18:18: 18:31 error: binary operation `+` cannot be applied to type `&collections::string::String` [E0369]
src\main.rs:18 let sx = &self.field_1 + &self.field_2 + word;
^~~~~~~~~~~~~
src\main.rs:19:10: …Run Code Online (Sandbox Code Playgroud) 我有一个带有两个参数的函数(假设两个字符串):
fn foo(x: String, y: String) -> String {
x + y
}
Run Code Online (Sandbox Code Playgroud)
我总是x在编译时知道,但y直到运行时我才知道。
我怎样才能编写这个以获得最大效率,而无需为每个函数复制粘贴x?
我有两个变量,每个变量都包含一个字符串。我想用它们之间的换行符连接两者。我怎么做?
我有一个输入:
let b = String::from("1 2 4 5 6");
Run Code Online (Sandbox Code Playgroud)
我的任务是将每个值的指数函数作为输出返回:
let output = "2.718281828459045 7.38905609893065 54.598150033144236 148.4131591025766 403.4287934927351";
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个任务。如何解析每个值并使用 exp 函数并发送结果字符串?