首页 > 解决方案 > 如何显式注释数组文字的类型

问题描述

我有这个 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是。这可以编译,但是如果我将它移到函数调用中,它不会编译:?2TEXTparams

statement.execute(&[
    &0u32,
    &"hello",
])?;

这给出了以下错误&hello

mismatched types
  expected type `&u32`
found reference `&&'static str`

似乎它根据第一个元素的类型推断数组文字的类型。显式设置数组类型的语法是什么?

标签: rust

解决方案


您可以像任何其他类型一样注释数组文字的类型,方法是将类型写在变量名之后,用冒号分隔:

let array: [u8; 5] = [1, 2, 3, 4, 5];

那不是你的问题。您的问题是您正在创建一个异构数组,其中每个元素的类型都不同。第一个元素是对整数的引用,第二个是字符串,等等。您需要更急切地对 trait 对象执行案例:

let x = [&42 as &dyn Display, &true];

特别是对于 rusqlite,使用params!宏为您执行此操作:

use rusqlite::params; // 0.23.1

fn main() {
    let x = params![&42, &true];
}

也可以看看:


推荐阅读