【发布时间】:2021-02-14 14:02:03
【问题描述】:
我正在尝试使用递归公用表表达式(大约 80 行 SELECT 语句)集成一个相当复杂的 SQL 查询。有两种不同的查询可以作为递归的种子。我不想在我的代码中嵌入两个不同的 80 行 SQL 语句,相差一行,谢谢,但我也想避免在每次使用时重新计算这些表达式,所以 lazy_static! 和 include_str! 看起来像要走的路。
lazy_static! {
static ref select_kasten_by_title_sql: &'static str = str::replace(
include_str!("sql/select_kasten_by_parameter.sql"),
"QUERYPARAMETER",
"zettlen.title"
)
.as_str();
}
除了我不断得到:
5 | static ref select_kasten_by_title_sql: &'static str = str::replace(
| ___________________________________________________________^
| |___________________________________________________________|
| ||
26 | || include_str!("sql/select_kasten_by_parameter.sql"),
27 | || "QUERYPARAMETER",
28 | || "zettlen.title").as_str();
| ||________________________-________^ returns a value referencing data owned by the current function
| |_________________________|
| temporary value created here
这让我很困惑,因为我无法确定它指的是什么功能。我知道有一个临时值,但它的生命周期应该是这个表达式的持续时间,不应该,一旦它被设置为静态 str,就是这样,对吧?
【问题讨论】:
-
根据
lazy_static的文档,初始化表达式在第一次取消引用静态时运行。因此,所引用的函数是Deref::deref的实现。