Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Can someone explain to me why rust decided not to support pattern matching with different types?

Suchas:

let x = Bus();

match x{

   Car => ...

   Bus => ...

   Person => ...
}

You would need to have runtime type information of course, this could be a compiler flag.



Why can't you already do this with an enum?

Rust isn't go. You don't have to break out of the type system because it doesn't have generics.


Because rust is statically typed, and "x" has to have a concrete type known at compile time?

Maybe there's a use case for matching trait objects against types to get back the original type. But, I think you could do the same thing by adding a trait method that returns Option<T> for some desired type T. If the object wasn't that type, it could just return None.


And this is actually implemented by the Any trait.

https://doc.rust-lang.org/std/any/trait.Any.html



Rust has static types with generics and algebraic data types. 99% of the use cases for that get covered. It has trait objects for when you need runtime type information, but they're used very rarely and you can make that pattern work with a chain of `downcast_ref` if lets or obviate its need by implementing methods.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: