Вы можете просто реализовать черту для конкретного типа Option<String>
:
impl OptionUtil for Option<String> {
fn sample1(self: &Self) {
println!("{:#?}", self);
}
}
Я написал ящик, type_eq , который позволит вам написать что-то, что выглядит больше похоже на ваш пример Swift. Но это идентично реализации черты для Option<String>
:
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);
}
На самом деле очень мало случаев, когда этот ящик полезен. Большую часть времени будет работать более простой код, приведенный выше, и это предпочтительнее.