Как инициализировать константы верхнего уровня другими константами? - PullRequest
3 голосов
/ 30 марта 2012

Я хотел бы инициализировать некоторые константы верхнего уровня, используя 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

Ответы [ 2 ]

4 голосов
/ 01 апреля 2012

Сообщения об ошибках:

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

означает, что в настоящее время нет реализации для этих случаев в компиляторе Rust 0.2 Rust не может разрешить значение идентификатора pi.

Необходимая функциональность может появиться в будущем выпуске Rust.

0 голосов
/ 01 апреля 2012

Я не могу проверить, потому что я не могу сейчас скомпилировать Rust на моей машине, но я думаю, что ваша проблема может заключаться в том, что константа pi определяется как тип c_float, а не как float. Попробуйте:

const pi2: c_float = pi*pi;

И посмотри, окажет ли это какое-либо влияние. Вам также может понадобиться строка импорта, например import libc::c_float;, если тип также необходимо импортировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...