请教大佬们一个问题,代码如下:
trait MyTrait{}
struct S<T: MyTrait>{
optional: Option<T>,
main: String
}
impl<T> From<&str> for S<T> where T: MyTrait{
fn from(main: &str) -> Self{
S{
optional: None,
main: main.to_string()
}
}
}
fn main(){
// 下面的S参数需要写泛型参数,请问这个泛型参数该怎么写?
// 或者说有没有办法声明某个泛型参数在某些impl里是非必须的,还是有其它更好的方式来处理这类问题呢?
let s: S<?> = "".into();
}
1
共 5 条评论, 1 页
评论区
写评论招 Rust 工程师: https://rustcc.cn/article?id=4a85e4c0-34fd-457c-9ce6-58e8bf687058
虽然你在这里给
optional
放了个None
,看起来T
是个啥对它都没有影响,但实际上不是这样的。S<u8>
和S<u64>
的optional
的大小是不一样的,从而相应的S<T>
的大小也不一样,所以编译器才提示你必须写明类型。--
👇
fefit: 感谢回复,大概能理解这个意思了。看来泛型的机制使得最后必须对应到具体类型,如果值有某种方式,可以标识不同的泛型实际类型、对实际的数据没有实质影响,进而可以在某些情况下可以忽略泛型参数就好了。看来不是这么简单好处理的,只能另想方式了~再次感谢!
--
👇
chirsz-ever: 必须要写,或者可通过其他方式推导,因为不同的
None
也是不一样的。那你就写一个空实现呀
--
👇
fefit: 感谢回复,大概能理解这个意思了。看来泛型的机制使得最后必须对应到具体类型,如果值有某种方式,可以标识不同的泛型实际类型、对实际的数据没有实质影响,进而可以在某些情况下可以忽略泛型参数就好了。看来不是这么简单好处理的,只能另想方式了~再次感谢!
--
👇
chirsz-ever: 必须要写,或者可通过其他方式推导,因为不同的
None
也是不一样的。感谢回复,大概能理解这个意思了。看来泛型的机制使得最后必须对应到具体类型,如果值有某种方式,可以标识不同的泛型实际类型、对实际的数据没有实质影响,进而可以在某些情况下可以忽略泛型参数就好了。看来不是这么简单好处理的,只能另想方式了~再次感谢!
--
👇
chirsz-ever: 必须要写,或者可通过其他方式推导,因为不同的
None
也是不一样的。必须要写,或者可通过其他方式推导,因为不同的
None
也是不一样的。