我有这个文件utils.rs声明lazy_static如下:
extern crate geojson;
extern crate geo;
use self::geo::MultiPolygon;
use self::geojson::GeoJson;
use self::geojson::conversion::TryInto;
lazy_static! {
pub static ref LAND_POLYGONS: MultiPolygon<f64> = {
let input_string = include_str!("resources/land.geojson");
let mut polygons: Vec<Polygon<f64>> = vec![];
// ...
// add some polygons here
// ...
MultiPolygon(polygons)
};
}
Run Code Online (Sandbox Code Playgroud)
然后在main.rs我尝试使用LAND_POLYGONS如下:
#[macro_use]
extern crate lazy_static;
extern crate geo;
use self::geo::MultiPolygon;
use utils::LAND_POLYGONS;
fn main() -> Result<(), Box<Error>> {
lazy_static::initialize(&LAND_POLYGONS);
println!("{:?}", LAND_POLYGONS);
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下编译器错误:
error[E0277]: `utils::LAND_POLYGONS` doesn't implement `std::fmt::Debug`
--> src/main.rs:30:22
|
30 | println!("{:?}", LAND_POLYGONS);
| ^^^^^^^^^^^^^ `utils::LAND_POLYGONS` cannot be formatted using `:?`; add `#[derive(Debug)]` or manually implement `std::fmt::Debug`
|
= help: the trait `std::fmt::Debug` is not implemented for `utils::LAND_POLYGONS`
= note: required by `std::fmt::Debug::fmt`
Run Code Online (Sandbox Code Playgroud)
似乎LAND_POLYGONS是作为其自己类型的实例加载的。
如何给出LAND_POLYGONS它的正确类型,而geo::MultiPolygon不是一个?作为旁注,MultiPolygon确实确实实现了Debug.
该lazy_static文档和例子使它看起来像这会已经没有什么特别做的情况。
注意:当将以上所有内容放在一个main.rs文件中时,结果是一样的。
在幕后,lazy_static 生成一个一次性结构类型,其Deref实现为您提供对您指定的类型的实际值的引用。
将您的println声明更改为:
println!("{:?}", *LAND_POLYGONS);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1377 次 |
| 最近记录: |