bounty将在3天后过期。回答此问题可获得+500声望奖励。Matt Joiner希望引起更多关注此问题。
在使用prepare
和query
时,我很难弄清楚如何返回迭代器(impl
或Box
)。
以下是我尝试过的:
fn foo<'a>(
conn: &'a mut rusqlite::Connection
) -> Box<impl 'a + fallible_streaming_iterator::FallibleStreamingIterator<Item=rusqlite::Row<'a>>> {
Box::new(
conn
.prepare("SELECT a, b FROM t")
.unwrap()
.query(rusqlite::NO_PARAMS)
.unwrap()
)
}
字符串
问题是prepared语句是函数作用域(error[E0515]: cannot return value referencing temporary value
)拥有的临时变量。
1条答案
按热度按时间du7egjpx1#
无法从
foo
函数返回FallibleStreamingIterator<Item=rusqlite::Row<'a>>
示例。Rust借用检查器不允许这样做。
要理解为什么,我们需要了解
rusqlite::Rows<'a>
是如何构造的。字符串
Github来源:
它的
FallibleStreamingIterator
实现看起来像型
Github源代码:FallibleStreamingIterator
Rows
保存了对Statement
的引用。让我们在这里尝试推断生命周期'stmt
。型
可能的解决办法是
1.返回拥有的
rusqlite::Statement<'a>
并查询所需位置1.或返回计算的结果集(拥有的)