gpt4 book ai didi

rust - 参数数量/类型不匹配

转载 作者:行者123 更新时间:2023-11-29 08:03:14 38 4
gpt4 key购买 nike

这个

extern crate postgres;

use postgres::{Connection, SslMode};

struct User {
reference: String,
email: String,
firstname: String,
lastname: String
}

static DB_URI: &'static str = "postgres://postgres:postgres@localhost/test";

fn main() {

let conn = Connection::connect(DB_URI, &SslMode::None).unwrap();
let trans = conn.transaction().unwrap();

//...

}

fn insert_user<'a>(trans: &'a postgres::Transaction, user: &User) -> &'a postgres::Result {
//...
}

抛出一个错误

error: wrong number of type arguments: expected 1, found 0 [E0243]
fn insert_user<'a>(trans: &'a postgres::Transaction, user: &User) -> &'a postgres::Result {
^~~~~~~~~~~~~~~~

这里缺少什么?我只想返回已执行查询的结果。

UPDATE 所以我修改了函数行如下:

fn insert_user(trans: &postgres::Transaction, user: &User) -> &postgres::Result<()> {

诱使编译器显示正确的返回类型,它给了我这个:

mismatched types:
expected `core::result::Result<(), postgres::error::Error>`,
found `core::result::Result<postgres::Rows<'_>, postgres::error::Error>`

然而,当我尝试像这样匹配返回类型时:

fn insert_user(trans: &postgres::Transaction, user: &User) -> &postgres::Result<postgres::Rows<'_>, postgres::error::Error> {

它现在抛出一个新的错误:

error: use of undeclared lifetime name `'_` [E0261]
fn insert_user(trans: &postgres::Transaction, user: &User) -> postgres::Result<postgres::Rows<'_>, postgres::error::Error> {
^~

最佳答案

查看 documentation对于 crate postgres ,我们可以看到类型 postgres::Result在一种类型参数上是通用的:

type Result<T> = Result<T, Error>;

通常你有两种选择:

  1. 如果您知道它是什么,请自行指定类型:postgres::Result<MyType>
  2. 让编译器为您推断(如果它在其他地方有足够的信息):postgres::Result<_>

但是在返回类型(-> 之后的内容)中不会触发类型推断,因此只有选项 1. 可用。

(提示:您仍然有一个技巧可以找出所需的类型。您可以尝试指定单位类型:... -> postgres::Result<()> 并检查编译器是否报错,例如“expected MyType,found () ”。这意味着您要指定 ... -> postgres::Result<MyType> 。)

关于rust - 参数数量/类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782309/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com