но меня не интересует одинаковость их значений
enum Data {
Int(i32),
Str(String),
Float(f64),
}
fn add(self,rhs: Data) -> Self::Output {
match self {
Data::Int(v1) => {
match rhs {
Data::Int(v2) => Data::Int(v1 + v2),
_ => panic!("can't add"),
}
}
Data::Str(v1) => {
match rhs {
Data::Str(v2) => Data::Str(v1 + &v2[..]),
_ => panic!("can't add"),
}
}
Data::Float(v1) => {
match rhs {
Data::Float(v2) => Data::Float(v1 + v2),
_ => panic!("can't add"),
}
}
}
}
match (lhs, rhs)
use Data::*; match (self, rhs) { (Int(v1), Int(v2)) => ... } было бы посимпатичнее
std::mem::discriminant
fn add(self,rhs: Data) -> Self::Output { match (self, rhs) { (Int(x), Int(y)) => Int(x+y), ... } }
is this programming language?
Обсуждают сегодня