Подтвердить что ты не робот

Постоянная PI неоднозначна

Рассмотрим следующий код:

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? Я никогда раньше этого не видел.
  • И, очевидно, что я могу сделать, чтобы исправить эту ошибку и установить мою переменную в PI?
4b9b3361

Ответ 1

Чтобы решить проблему, добавьте use std::f32 или используйте std::f32::consts::PI, чтобы компилятор знал, что мы говорим о модуле f32 здесь, а не о типе f32.

Ответ 2

Что это за синтаксис <f32 as Trait>::consts? Я никогда не видел его раньше.

В настоящее время это называется "синтаксис вызова универсальных функций" http://doc.rust-lang.org/stable/book/ufcs.html, но мы говорим о том, чтобы больше не называть его, поскольку это не является функцией... это скорее расширенная, недвусмысленная форма.