static - 对于计算一次然后可以在应用程序的任何地方使用的不可变对象,最合适的模式是什么?
问题描述
来自 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 中实现相同功能的最合适的模式是什么?这个想法是值landPolygons
和mountains
必须只计算一次,然后可以在整个应用程序的任何地方使用。
尝试使用const
orstatic
声明时,编译器会输出以下错误:
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();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
解决方案
推荐阅读
- android - Android - 是否成功安装适用于 AMD 处理器的 Android Emulator Hypervisor Driver
- javascript - 在 javascript onClick 中使用本地属性
- c# - 有没有一种有效的方法可以在 Windows 窗体中每秒绘制 30 个位图?
- javascript - 让 JavaScript 函数显示结果而不是隐藏结果
- essbase - 没有动态计算成员的 Lvl 0 成员列表 (Essbase)
- ios - 为什么我的 CaLayer 没有出现在 UIView 之上?
- apache-spark - 我们如何在 Spark Structured Streaming 中获取延迟指标?
- php - 如何在 PHP 中解析 JSON 数组并显示在 HTML 表中?
- svelte - Sveltekit 无服务器适配器,如 vercel 或适配器静态?
- python - discord.py 上的 Deafen Members 和 Whisper 命令