【发布时间】:2020-07-01 12:07:02
【问题描述】:
我有这个 Rusqlite 代码:
use rusqlite::types::ToSql;
// ... normal Rusqlite initialisation code ...
let mut statement = tx.prepare("INSERT INTO table VALUES (?1, ?2)")?;
let params: &[&dyn ToSql] = &[
&0u32,
&"hello",
];
statement.execute(params)?;
?1 参数是 INTEGER,?2 参数是 TEXT。这可以编译,但是如果我将 params 移动到函数调用中,它不会编译:
statement.execute(&[
&0u32,
&"hello",
])?;
这会为&hello 提供以下错误。
mismatched types
expected type `&u32`
found reference `&&'static str`
它似乎是根据第一个元素的类型推断数组文字的类型。显式设置数组类型的语法是什么?
【问题讨论】:
-
试试
&[&0u32 as &dyn ToSql, &"hello" as &dyn ToSql]? -
我认为您只需要将第一个数组元素强制为
&dyn ToSql。 -
很难回答您的问题,因为它不包含minimal reproducible example。我们无法分辨代码中存在哪些 crate(及其版本)、类型、特征、字段等。如果您尝试在Rust Playground 上重现您的错误,如果可能的话,这将使我们更容易为您提供帮助,否则在全新的 Cargo 项目中,然后在edit 您的问题中包含附加信息。您可以使用Rust-specific MRE tips 来减少您在此处发布的原始代码。谢谢!
-
请edit 您的问题并粘贴您所得到的准确和完整的错误——这将帮助我们了解问题所在,以便我们能够提供最好的帮助。有时试图解释错误消息很棘手,实际上错误消息的不同部分很重要。请使用直接运行编译器的消息,而不是 IDE 生成的消息,它可能会尝试为您解释错误。
标签: rust