3

を使用していくつかの最上位定数を初期化したいと思いますfloat::consts::pi。例えば:

import float::consts::pi;

const pi2:float = pi*pi;

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

これらのエラーが発生します:

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 pi2:float = 3.14*3.14;

しかし、私が自分自身を定義した場合はそうではありませんpi

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

rust-0.2を使用しています。

更新します。rust-0.3.1のメッセージはわかりやすく、機能がまだ実装されていないことを確認します。同じクレート定数を参照できるようになりました:

$ 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
4

2 に答える 2

4

エラーメッセージ:

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;
                             ^~

これは、現在Rust0.2コンパイラにこれらのケースの実装がないことを意味します。Rustは識別子の値を解決できませんpi

必要な機能は、Rustの将来のリリースで登場する可能性があります。

于 2012-04-01T11:47:22.160 に答える
0

現在、自分のマシンでRustをコンパイルできないため、確認できませんが、pi定数が型c_floatではなく型として定義されていることが問題である可能性がありますfloat。試す:

const pi2: c_float = pi*pi;

そして、それが何らかの効果があるかどうかを確認してください。タイプもインポートする必要がある場合のように、インポート行も必要import libc::c_float;になる場合があります。

于 2012-04-01T03:25:30.863 に答える