Jer*_*wen 6 typechecking lifetime rust
夜间生锈:
struct Foo<T, F: Fn(&T, &T) -> T> {
value: T,
func: F
}
fn main() {
let lambda = |&x, &y| x + y;
let foo = Foo {
value: 5 as i32,
func: lambda
};
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
struct Foo<T, F: Fn(&T, &T) -> T> {
value: T,
func: F
}
fn main() {
let lambda = |&x, &y| x + y;
let foo = Foo {
value: 5 as i32,
func: lambda
};
}
Run Code Online (Sandbox Code Playgroud)
请注意,预期类型和找到的类型是相同的字符。为什么错误消息说一种类型比另一种更通用,同时还说它们是同一类型?
\n\n\n夜间生锈:
\n
这似乎只是夜间构建中的“坏”错误消息。在 Rust 1.32(稳定)中,错误告诉您这是生命周期不匹配:
\n\nerror[E0631]: type mismatch in closure arguments\n --> src/main.rs:8:15\n |\n7 | let lambda = |&x, &y| x + y;\n | -------------- found signature of `fn(&_, &_) -> _`\n8 | let foo = Foo {\n | ^^^ expected signature of `for<\'r, \'s> fn(&\'r i32, &\'s i32) -> _`\n |\nnote: required by `Foo`\n --> src/main.rs:1:1\n |\n1 | struct Foo<T, F: Fn(&T, &T) -> T> {\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nerror[E0271]: type mismatch resolving `for<\'r, \'s> <[closure@src/main.rs:7:18: 7:32] as std::ops::FnOnce<(&\'r i32, &\'s i32)>>::Output == i32`\n --> src/main.rs:8:15\n |\n8 | let foo = Foo {\n | ^^^ expected bound lifetime parameter, found concrete lifetime\n |\nnote: required by `Foo`\n --> src/main.rs:1:1\n |\n1 | struct Foo<T, F: Fn(&T, &T) -> T> {\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n为什么错误消息说一种类型比另一种类型更通用,同时又说它们是同一类型?
\n
这些类型仅在生命周期方面有所不同。每晚消息不包含生命周期 \xe2\x80\x94 ,可能是为了在生命周期不相关的情况下减少噪音。显然,当生命周期是类型之间的唯一区别时,这根本没有帮助。
\n\n考虑向 Rust 团队报告错误。
\n| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |