如何将实现Into<bool>的泛型T的引用&T转换为bool?
解决Rust中& T到bool的转换问题
你的代码报错的核心原因是:Into<bool> trait是为泛型T本身实现的,但你传入的是&T(T的引用),而bool并没有实现From<&T>(Into和From是互逆的,U: Into<V>等价于V: From<U>),因此直接调用input.into()会触发 trait 约束不满足的错误。
下面是几种可行的修改方案:
方案一:解引用后调用into()
既然T本身实现了Into<bool>,对引用显式解引用得到T实例后即可正常转换:
fn ref_bool<T: Into<bool>>(input: &T) -> bool { (*input).into() }
方案二:使用From trait直接转换
利用T: Into<bool>等价于bool: From<T>的特性,直接通过bool::from完成转换:
fn ref_bool<T: Into<bool>>(input: &T) -> bool { bool::from(*input) }
方案三:调整泛型约束(适用于需要同时支持T和&T输入的场景)
如果希望函数既能接受T又能接受&T作为输入,可以修改泛型约束为引用类型实现Into<bool>:
fn ref_bool<T>(input: &T) -> bool where &'_ T: Into<bool>, { input.into() }
不过这种方式的通用性不如前两种,因为并非所有实现Into<bool>的类型,其引用类型都有对应的Into<bool>实现,因此更推荐前两种解引用的方案。
内容的提问来源于stack exchange,提问作者kalkronline
相关产品推荐
相关产品推荐

