3 ms·
So in this case, someone has created a trait, I guess as part of the standard library, that provides parsing of network addresses from strings? From reading th
by jessedhillon 10y ago
So in this case, someone has created a trait, I guess as part of the standard library, that provides parsing of network addresses from strings?
From reading the docs, something provides a method called `FromStr` and the `str.parse` method does some magic to figure out which `FromStr` of all the registered traits is the one which we want? So then, it's not arbitrary monkey-patching, but using a defined protocol for defining and extending string parsing?
- dbaupp 10y agoThe parse method is an inherent method on the string type (i.e. not connected to a trait, and doesn't need an import), but added by the standard library, yes. > From reading the docs, something provides a method called `FromStr` and the `str.parse` method does some magic to figure out which `FromStr` of all the registered traits is the one which we want? The method isn't doing any magic: the language's type inference is deducing that the return type has to be a SocketAddr based on how the return value is used (it is passed to a function expecting a SocketAddr), and this forces the compiler to use the SocketAddr implementation of the FromStr trait (which has a from_str method), all at compile time. (If the compiler deduced that the return type was something that didn't implement FromStr, i.e. no idea how to parse that value from a string, one would get a compile error.) > So then, it's not arbitrary monkey-patching, but using a defined protocol for defining and extending string parsing? Yes, parse is entirely driven by the FromStr trait.