2012-03-30 61 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