trait Foo {
fn foo<T>(&self) -> T;
}
struct Bar {
b: u8,
}
impl Foo for Bar {
fn foo<u8>(&self) -> u8 {
self.b
}
}
fn main() {
let bar = Bar {
b: 2,
};
println!("{:?}", bar.foo());
}
上述代码导致以下错误:
error[E0308]: mismatched types
--> <anon>:11:9
|
11 | self.b
| ^^^^^^ expected type parameter, found u8
|
= note: expected type `u8` (type parameter)
found type `u8` (u8)
我的猜测是,问题出在trait中的类属函数。
下面的代码并不符合您的预期
impl Foo for Bar {
fn foo<u8>(&self) -> u8 {
self.b
}
}
它引入了一个名为U8
的泛型类型,该类型遮蔽了具体类型U8
。您的功能将与
impl Foo for Bar {
fn foo<T>(&self) -> T {
self.b
}
}
因为foo
的调用方选择的t
不能保证为u8
。
trait Foo<T> {
fn foo(&self) -> T;
}
struct Bar {
b: u8,
}
impl Foo<u8> for Bar {
fn foo(&self) -> u8 {
self.b
}
}
trait Foo {
type T;
fn foo(&self) -> T;
}
struct Bar {
b: u8,
}
impl Foo for Bar {
type T = u8;
fn foo(&self) -> u8 {
self.b
}
}
我试图在Rust中实现一个责任链: 链接到操场 臭名昭著的信息是: 编译playground v0.0.1(/playground)错误[E0308]:不匹配的类型- 有关此错误的更多信息,请尝试。错误:由于以前的错误,无法编译 我不明白为什么编译器抱怨期待
问题总结:我想传递一个带有类型参数(如
我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误:
一、泛型 Scala 支持类型参数化,使得我们能够编写泛型程序。 1.1 泛型类 Java 中使用 <> 符号来包含定义的类型参数,Scala 则使用 []。 class Pair[T, S](val first: T, val second: S) { override def toString: String = first + ":" + second } object ScalaAp
问题内容: 问题摘要: 我想将具有类型参数(例如)的类作为类型参数传递给泛型方法。 假设我有一个方法: 当然,此方法对于任何类型的类都可以正常使用。我可以这样调用该方法,例如: 问题: 我发现我不能这样做: 从句法上讲,这显然是无效的。但是,我不确定如何实现这样的目标。我当然可以通过,但是泛型类型的添加使其在语法上不再有效,并且我想不出解决方法。 唯一的直接解决方案是这样的事情(看起来很愚蠢):
本文向大家介绍TypeScript 类型参数作为约束,包括了TypeScript 类型参数作为约束的使用技巧和注意事项,需要的朋友参考一下 示例 使用TypeScript 1.8,类型参数约束可以从同一类型参数列表中引用类型参数。以前这是一个错误。