Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PI constant is ambiguous

Tags:

pi

rust

ambiguous

Consider following code:

fn main() {
    let i = f32::consts::PI;
}

With following error:

$ 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
  1. Why does it complain about an "associated type"? The only type I see here is f32, which is not associated.
  2. Why is this ambigious? I clearly specified the f32.
  3. What is this <f32 as Trait>::consts syntax? I've never seen it before.
  4. And, obviously, what can I do to fix this error and get my variable set to PI?
like image 218
Kapichu Avatar asked Jul 03 '15 13:07

Kapichu


People also ask

What is .PI in Swift?

pi property in Swift represents the mathematical constant pi.

How do you declare Pi in Swift?

alt + p is the shortcut (on US-keyboards) that will create the π unicode character.


2 Answers

To solve the issue, add use std::f32 or use std::f32::consts::PI, so that the compiler knows we're talking about the module f32 here, not the type f32.

like image 151
Kapichu Avatar answered Sep 21 '22 15:09

Kapichu


What is this <f32 as Trait>::consts syntax? I've never seen it before.

This is currently called "universal function call syntax" http://doc.rust-lang.org/stable/book/ufcs.html, but we're talking about not calling it that anymore, since this isn't a function... it's more of an expanded, unambiguous form.

like image 41
Steve Klabnik Avatar answered Sep 19 '22 15:09

Steve Klabnik