You could specify the type of the T
in the type Option<T>
for this None
with:
let section = ifo_cfg.section(None::<String>).unwrap();
// ^^^^^^^^^^ forces the type to be Option<String>
Alternatively, you could specify the type S
of the method section
:
let section = ifo_cfg.section::<String>(None).unwrap();
// ^^^^^^^^^^ forces S = String
You can also look up E0282's explanation, although it might not really answer your question at this time :)
The syntax ::<T,U,V>
is sometimes called the turbofish. Some very generic methods like String::parse()
and Iterator::collect()
can return almost anything, and type inference does not have enough information to find the actual type. The ::<T,U,V>
allow the human to tell the compiler what generic parameter should be substituted. From parse()
's reference:
Because parse()
is so general, it can cause problems with type inference. As such, parse()
is one of the few times you'll see the syntax affectionately known as the 'turbofish': ::<>
. This helps the inference algorithm understand specifically which type you're trying to parse into.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…