试图声明一个String const会产生预期的类型,找到" my string"

时间:2017-07-18 20:23:37

标签: string rust const

我试图在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

1 个答案:

答案 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,这隐含在conststatic中:

const DATABASE: &str = "/var/lib/tracker/tracker.json";

只需要读取字符串的函数应该接受&str,因此这不太可能导致任何问题。它还具有不需要任何分配的好处,因此它非常有效。

如果您需要 String,您可能需要改变它。在这种情况下,使其全球化将导致线程问题。相反,您应该只在需要时使用String::from(DATABASE)进行分配并传入String

另见:

  • {{3}}