- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Rust 并且遇到了类似的东西
struct A<T> {
some_vec: Vec<T>,
pub secret: &'static str
}
struct B{}
struct C{}
impl B {
fn foo<T>(&self) {
let bar: A<T> = A {
some_vec: Vec::new(),
secret: "123"
};
println!("The secret is {}", bar.secret);
}
}
impl C {
fn foo<T>(&self) {
let b = B{};
b.foo();
}
}
fn main() {
let c = C{};
c.foo();
}
这会产生编译错误
error: unable to infer enough type information about `_`; type annotations or generic parameter binding required [--explain E0282]
--> src/main.rs:26:11
|>
26 |> b.foo();
|> ^^^
我看过关于相同错误消息的帖子,但在这种情况下我无法找出解决方案。我缺少指定哪些信息(与 b.foo()
相关)?
最佳答案
由于类型推断对于许多刚接触 Rust 的人来说是一种新鲜事物,所以让我们更深入地解释一下。
本质上,类型推断有点像您在杂志上玩过的那些“迷宫”游戏:
您在左侧有一堆类型未知的地方,可以连接到右侧的少数已知类型。如何?那么,通过检查类型之间的关系!
最简单的关系(无需猜测)是 1 度关系:
let x: String = "Hello, World".into();
在 Rust 中,我们知道 into()
来自 Into<T>
&str
实现的特征, 但是 T
?嗯,into()
返回 T
表达式的类型应为 String
,因此它必须是Into<String>
.
为了解决类型推断,编译器会因此在需要推断类型的地方和已知类型之间建立某种关系图(在Rust中,函数签名必须是显式的,所以它不应该有搜索太多),然后将尝试一点一点地推导类型。
让我们检查一下当前用例:
fn main() {
let c = C{};
c.foo();
}
在这里,c.foo();
电话 C::foo<T>()
:我们需要推断T
.我们有什么信息?没有任何。 Zilch。纳达。
在这种情况下,无法解决问题,编译器退出并询问您(开发人员)您想要什么T
成为。您可以通过多种方式指定它:
::<>
如 c.foo::<i32>()
let x: i32 = ...;
。 _
。字符以省略它的一部分,如 let x: Vec<_> = ...;
或 c.foo::<Vec<_>>()
如果编译器有足够的信息来推断 _
当然是靠自己。关于generics - Rust 编译器无法推断出有关泛型类型的足够信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39195621/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!