我试图在Rust中声明一个String
常量,但是我得到一个编译器错误,我只是无法理解
const DATABASE : String::from("/var/lib/tracker/tracker.json");
以及我在尝试编译时得到的结果:
error: expected type, found `"/var/lib/tracker/tracker.json"`
--> src/main.rs:19:31
|
19 | const DATABASE : String::from("/var/lib/tracker/tracker.json");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: expected one of `!`, `+`, `->`, `::`, or `=`, found `)`
--> src/main.rs:19:64
|
19 | const DATABASE : String::from("/var/lib/tracker/tracker.json");
| ^ expected one of `!`, `+`, `->`, `::`, or `=` here
答案 0 :(得分:16)
您应该阅读The Rust Programming Language, second edition,特别是chapter that discusses constants。声明const
的正确语法是:
const NAME: Type = value;
在这种情况下:
const DATABASE: String = String::from("/var/lib/tracker/tracker.json");
然而,这不会起作用,因为分配字符串不是可以在编译时计算的东西。 const
的意思是什么。您可能希望使用string slice,特别是具有静态生命周期的How to create a static string at compile time,这隐含在const
和static
中:
const DATABASE: &str = "/var/lib/tracker/tracker.json";
只需要读取字符串的函数应该接受&str
,因此这不太可能导致任何问题。它还具有不需要任何分配的好处,因此它非常有效。
如果您需要 String
,您可能需要改变它。在这种情况下,使其全球化将导致线程问题。相反,您应该只在需要时使用String::from(DATABASE)
进行分配并传入String
。
另见: