gpt4 book ai didi

rust - 为什么声明的泛型类型多于它使用的泛型类型的函数需要类型注释?

转载 作者:行者123 更新时间:2023-11-29 08:22:17 26 4
gpt4 key购买 nike

fn lifetime_tester<A, B, C>(a: Box<A>, b: Box<B>, c: &i32) -> &i32 {
c
}

fn main() {
let a = Box::new(String::from("Test1"));
let b = Box::new(55 as i32);
let c: i32;
{
c = 34 as i32;
}
println!("{}", lifetime_tester(a, b, &c));
}

错误:

error[E0282]: type annotations needed
--> src/main.rs:12:20
|
12 | println!("{}", lifetime_tester(a, b, &c));
| ^^^^^^^^^^^^^^^ cannot infer type for `C`

我对“类型注释”需要去哪里感到困惑。我已将返回类型指定为 &i32,我已将参数类型指定为 &i32,并且我还指定了 c 是一个i32

最佳答案

因为你的函数的参数和通用类型之间没有联系 C , 编译器不知道你要替换哪种类型 C在函数调用中。在这种情况下,您的代码甚至不使用类型 C所以没关系,但 Rust 非常重视“局部推理”——即它不会偷看你的函数内部来确定你没有使用 C在语法检查阶段。

您可以使用“turbofish”运算符明确告诉它您的类型,::<> , 像这样

println!("{}", lifetime_tester::<_, _, i32>(a, b, &c));

关于rust - 为什么声明的泛型类型多于它使用的泛型类型的函数需要类型注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273517/

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