首页 > 解决方案 > 对于计算一次然后可以在应用程序的任何地方使用的不可变对象,最合适的模式是什么?

问题描述

来自 Scala 背景,存储复杂的长寿命不可变对象(如MultiPolygon从文件加载的大型 GeoJson)的典型方法如下:

// in Helpers.scala
package helpers

object Helpers {
  val landPolygons = loadFromGeoJsonFile("land-polygons.geojson")
  val mountains = loadFromGeoJsonFile("mountains.geojson")
}

// and anywhere else in the app
import helpers.Helpers._

def myAwesomeFunc() = {
  val myPoint = Point(23.0, 56.0)
  val distFromLand = myPoint.distance(landPolygons)
  val distFromMountains = myPoint.distance(mountains)
}

在 Rust 中实现相同功能的最合适的模式是什么?这个想法是值landPolygonsmountains必须只计算一次,然后可以在整个应用程序的任何地方使用。

尝试使用constorstatic声明时,编译器会输出以下错误:

error[E0015]: calls in constants are limited to struct and enum constructors
  --> src/utils.rs:30:32
   |
30 | const LAND_POLYGONS: GeoJson = include_str!("resources/land.geojson").parse::<GeoJson>().unwrap();
   |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: a limited form of compile-time function evaluation is available on a nightly compiler via `const fn`
  --> src/utils.rs:30:32
   |
30 | const LAND_POLYGONS: GeoJson = include_str!("resources/land.geojson").parse::<GeoJson>().unwrap();
   |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

标签: staticrust

解决方案


推荐阅读