почему Rust str::parse() определяет универсальный тип, но не использует

#rust

Вопрос:

 impl str {  ...  #[inline]  #[stable(feature = "rust1", since = "1.0.0")]  pub fn parselt;F: FromStrgt;(amp;self) -gt; Resultlt;F, F::Errgt; {  FromStr::from_str(self)  } }   

Какой смысл вызывать метод интерфейсов from_str

Комментарии:

1. Это позволяет анализировать произвольные типы, включая пользовательские типы, при условии, что они реализуются FromStr .

2. Это означает , что "foo".parse() это сахар для FromStr::from_str("foo") , и "foo".parse::lt;MyTypegt;() это сахар для lt;MyType as FromStrgt;::from_str("foo") . В первых двух примерах тип для преобразования определяется из контекста, а во вторых двух он задан явно. В обоих случаях тип для преобразования должен быть реализован FromStr , но суть parse() в том, что он проще для глаз и позволяет использовать в цепных выражениях.

3. спасибо, я немного понимаю. Поскольку я сначала встретил пример функции someone_function(«foo».parse().unwrap ()), я перешел к str:: parse, но не смог увидеть, что было возвращено. Позже я обнаружил, что будет некоторая функция для неявного вызова параметра from::from_str, это всегда меня озадачивало. Теперь все немного прояснилось

4. Да, вы наблюдали вывод типа Раста в действии. В этом случае , если someone_function() принимает SomeType , то "foo".parse().unwrap() будет автоматически выведено значение "foo".parse::lt;SomeTypegt;().unwrap() .