Rust等价于具有相同泛型参数约束的Swift扩展方法?
在Swift中,我可以将方法添加到具有参数相等约束的泛型类型中Rust等价于具有相同泛型参数约束的Swift扩展方法?,rust,extension-methods,generic-constraints,Rust,Extension Methods,Generic Constraints,在Swift中,我可以将方法添加到具有参数相等约束的泛型类型中 extension Optional where Wrapped == String { // Available only for `Optional<String>` type. func sample1() { ... } } 等同于(没有明确的特征) extension可选,包装位置:DebugDescription{ func样本1(){ 打印(“\(自我)”) } } 因此,我认为这个锈迹
extension Optional where Wrapped == String {
// Available only for `Optional<String>` type.
func sample1() { ... }
}
等同于(没有明确的特征)
extension可选,包装位置:DebugDescription{
func样本1(){
打印(“\(自我)”)
}
}
因此,我认为这个锈迹代码可以工作,但它不会出现错误。(where子句中尚不支持相等约束(请参见#20041)
)
impl Option直到选项,其中T==String{
fn样本1(&self){
println!(“{:?}”,self);
}
}
您只需实现具体类型的trait选项
:
impl Option直到选项{
fn样本1(自我:&自我){
println!(“{:?}”,self);
}
}
我写了板条箱,它可以让你写一些看起来更像你的Swift例子的东西。但它与实现trait for选项
相同:
使用type_eq::{constraint,TypeEq};
使用std::fmt::Debug;
性状选择体{
fn样本1(和自身);
}
impl Option直到选择
哪里
约束:typeq,
T:调试,
{
fn样本1(&self){
println!(“{:?}”,self);
}
}
fn main(){
让s=Some(字符串::from(“hello”);
println!(“{:?}”,s);
}
实际上,这种板条箱有用的情况很少。大多数情况下,上面的简单代码会起作用,并且是首选。和@Stargateur我认为
PartialEq
/Eq
trait相当于Swift中的equalable
协议。这不是我要问的。哦,你想要什么?他想要吗?我想他只是想要impl-Foo作为选项
作为一些扩展特性Foo
@伊奥尼尔,既然不是所有人都熟悉Swift,你能描述一下这个功能是做什么的吗?@mcarton我想你说的就是我想要的。正如我所预料的那样。谢谢你能把你的评论转换成答案吗?顺便说一句,我更新了我的问题。
use type_eq::{Constrain, TypeEq};
use std::fmt::Debug;
trait OptionUtil {
fn sample1(&self);
}
impl<T> OptionUtil for Option<T>
where
Constrain: TypeEq<T, String>,
T: Debug,
{
fn sample1(&self) {
println!("{:#?}", self);
}
}
fn main() {
let s = Some(String::from("hello"));
println!("{:?}", s);
}