rust - 如何显式注释数组文字的类型
问题描述
我有这个 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`
似乎它根据第一个元素的类型推断数组文字的类型。显式设置数组类型的语法是什么?
解决方案
您可以像任何其他类型一样注释数组文字的类型,方法是将类型写在变量名之后,用冒号分隔:
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];
}
也可以看看:
推荐阅读
- java - React Native Publishing APP on Play Store Rejected (permissions)
- c++ - 在对向量的向量中查找 int
>> 使用 find_if - python - 合并熊猫中的两个数据框
- python - 如何用广播计算多维数组?
- google-apps-script - 设置单元格公式 Google Script 时出现 REF 错误
- python - 无法使 Pandas 差异函数在 Python 中工作
- sql - Sybase SQL Anywhere:LOAD TABLE 函数是否在存储过程中工作?
- asp.net-core - 视图组件的异常处理和重定向
- c++ - 我可以或为什么不能在 std::set 中按索引搜索元素?
- python - 使用 Python 进行地理编码 - 仅从公司名称中获取地址