我应该使用什么类型来 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
}
}
我计划拥有一个通过特征方法提供 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
}
}