Ответ 1
Чтобы решить проблему, добавьте use std::f32
или используйте std::f32::consts::PI
, чтобы компилятор знал, что мы говорим о модуле f32
здесь, а не о типе f32
.
Рассмотрим следующий код:
fn main() {
let i = f32::consts::PI;
}
Со следующей ошибкой:
$ rustc --version
rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
$ rustc -
<anon>:2:13: 2:28 error: ambiguous associated type; specify the type using the syntax `<f32 as Trait>::consts` [E0223]
<anon>:2 let i = f32::consts::PI;
^~~~~~~~~~~~~~~
error: aborting due to previous error
f32
, который не связан.f32
.<f32 as Trait>::consts
? Я никогда раньше этого не видел.Чтобы решить проблему, добавьте use std::f32
или используйте std::f32::consts::PI
, чтобы компилятор знал, что мы говорим о модуле f32
здесь, а не о типе f32
.
Что это за синтаксис
<f32 as Trait>::consts
? Я никогда не видел его раньше.
В настоящее время это называется "синтаксис вызова универсальных функций" http://doc.rust-lang.org/stable/book/ufcs.html, но мы говорим о том, чтобы больше не называть его, поскольку это не является функцией... это скорее расширенная, недвусмысленная форма.