В данном выражении, как компилятор выводит, какую специализацию шаблона parse() использовать?
let guess: u8 = "-42".parse().expect("Not a number!");
Откуда он узнаёт, что нужно использовать именно вариант parse() для u8, а не для f64 например? Какова логика разбора этого выражения компилятором?
Контекста ради: я пока на стадии чтения третьей главы букваря, а такие выражения на фоне опыта в Си и плюсах кажутся магией.
[Added]
Истинная магия с выводом типов начинается, когда они выводятся в абсолютно другом операторе:
let mut vec = Vec::new();
let val = "-42".parse().expect("Not a number!");
// ...
vec.push(3u8); // благодаря этому вектор типизируется как Vec<u8>
vec.push(val); // т.к. типизацию вектора известна выводится тип `val` и `parse()`