如何让函数针对参数的可变/不可变借用实现泛型?
问题解答
完全可以,不用写两个重复的函数,借助泛型就能实现自动适配不可变/可变引用的效果:
直接定义一个通用泛型函数即可:
fn do_nothing<T>(x: T) -> T { x }
这个函数会自动根据传入的参数推断T的具体类型——传入&i64时返回&i64,传入&mut i64时返回&mut i64,调用方式和你原来调用两个独立函数完全一致,不需要额外的手动指定。
如果需要限制函数仅接收引用类型(避免传入非引用值),可以添加 trait 约束:
fn do_nothing<T>(x: T) -> T where T: std::borrow::Borrow<T::Target>, { x }
不过大多数场景下,第一个极简版本就足够满足需求,Rust的类型推导会完美处理两种引用场景,无需手动干预mut修饰符的推断。
内容的提问来源于stack exchange,提问作者lanza
相关产品推荐
相关产品推荐

