2012-03-30 60 views
1

我想用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; 

我正在使用r烏斯季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編譯器沒有實現。 Rust無法解析標識符pi的值。

所需的功能可能會出現在未來的Rust版本中。

0

我無法驗證,因爲我不能在那一刻我的機器上編譯鏽,但我認爲你的問題可能是,pi常數定義爲c_float類型而不是輸入float。嘗試:

const pi2: c_float = pi*pi; 

然後看看是否有任何影響。如果需要導入類型,您可能還需要導入一行如import libc::c_float;

+0

謝謝,但這沒有幫助。 'pi'不是'c_float'。 – sastanin 2012-04-02 14:56:57