我应该使用什么类型来 return 一个 lazy_static 值?

What type should I use to return a lazy_static value?

我计划拥有一个通过特征方法提供 JSON 模式的结构。 模式存储在一个 lazy_static 变量中,但是我的 schema() 函数必须 return?

是哪种类型
lazy_static::lazy_static! {
    static ref DEF: serde_json::Value = serde_json::json!({
        "type": "object",
        "properties": {
            "name":         { "type": "string",
                            "minLength": 10,
                            },
        },
    });

    static ref SCHEMA: jsonschema::JSONSchema<'static> = jsonschema::JSONSchema::compile(&DEF).unwrap();
}

struct MySchema {
    name: String,
}

impl MySchema {
    pub fn schema() -> jsonschema::JSONSchema<'static> {
        SCHEMA
    }
}

#[test]
pub fn test() {
    let test = serde_json::json!({"name":"test"});
    assert_eq!(SCHEMA.is_valid(&test), false);
    assert_eq!(MySchema::schema().is_valid(&test), false);
}

我会得到这个错误


pub fn schema() -> jsonschema::JSONSchema<'static> {
                   ------------------------------- expected `JSONSchema<'static>` because of return type
    SCHEMA
    ^^^^^^ expected struct `JSONSchema`, found struct `SCHEMA`

我用 Sven Marnach 的回答结束这个问题:

您不能return拥有价值。您只能 return 对静态变量的引用。 将 return 类型更改为 &'static jsonschema::JSONSchema<'static>,将 return 值更改为 &*SCHEMA

lazy_static::lazy_static! {
    static ref SCHEMA: jsonschema::JSONSchema<'static> = jsonschema::JSONSchema::compile(&DEF).unwrap();
}

impl MySchema {
    pub fn schema() -> &'static jsonschema::JSONSchema<'static> {
        &*SCHEMA
    }
}