2012-03-30 8 views
1

float::consts::piを使っていくつかのトップレベル定数を初期化したいと思います。たとえば:トップレベルの定数を他の定数で初期化する方法は?

import float::consts::pi; 

const pi2:float = pi*pi; 

fn main() { 
    io::println(#fmt("pi^2=%.4f", pi2)); 
} 

私はこれらのエラーを取得:

const pi2:float = 3.14*3.14; 

しかし、私はpi自分自身を定義する場合はそうではありません:私が書く場合

pi2.rs:3:18: 3:20 error: constant contains unimplemented expression type 
pi2.rs:3 const pi2:float = pi*pi; 
          ^~ 
pi2.rs:3:21: 3:23 error: constant contains unimplemented expression type 
pi2.rs:3 const pi2:float = pi*pi; 
          ^~ 

コンパイルが成功する

const pi:float = 3.141592653589793; 
const pi2:float = pi*pi; 

私はrを使用していますust-0.2。

更新。 rust-0.3.1のメッセージは友好的で、機能がまだ実装されていないことを確認します。同じクレートの定数を参照することnow allowedです:

$ rustc pi2.rs 
pi2.rs:2:18: 2:20 error: paths in constants may only refer to crate-local constants 
pi2.rs:2 const pi2:float = pi*pi; 
          ^~ 
pi2.rs:2:21: 2:23 error: paths in constants may only refer to crate-local constants 
pi2.rs:2 const pi2:float = pi*pi; 
           ^~ 
error: internal compiler error: unexpected failure 
note: the compiler hit an unexpected failure path. this is a bug 
note: try running with RUST_LOG=rustc=0,::rt::backtrace to get further details and report the results to github.com/mozilla/rust/issues 

答えて

2

エラーメッセージが:

pi2.rs:3:18: 3:20 error: constant contains unimplemented expression type 
pi2.rs:3 const pi2:float = pi*pi; 
          ^~ 
pi2.rs:3:21: 3:23 error: constant contains unimplemented expression type 
pi2.rs:3 const pi2:float = pi*pi; 
          ^~ 

ラスト0.2コンパイラではこれらの例には、実装が現在存在しないことを意味します。錆は識別子piの値を解決できません。

必要な機能は、今後のRustのリリースで使用される可能性があります。

0

私は、現時点では私のマシン上で錆をコンパイルすることはできませんので、私は確認できないが、私はあなたの問題はpi定数がタイプc_floatとして定義されていることかもしれないと思いますタイプfloatではなく

const pi2: c_float = pi*pi; 
そして、それはどんな効果があるかどうかを確認:試してみてください。また、タイプをインポートする必要がある場合は、 import libc::c_float;のようなインポート行が必要な場合もあります。

+0

ありがとうございますが、これは役に立ちません。 'pi'は' c_float'ではありません。 – sastanin

関連する問題