2015-08-28 4 views
1

Как я могу сделать часть строки const условной над некоторым флагом?Как форматировать строку const

#[cfg(target_os = "macos")] 
const OS: &'static str = "OSx"; 
#[cfg(target_os = "windows")] 
const OS: &'static str = "Windows"; 

const SOME_STRING: &'static str = format!("this os is {}", OS); 

Этот код не компилируется потому что format макрокоманда возвращает String. Я хотел бы иметь возможность делать это форматирование без какого-либо выделения. Можно ли обойтись без того, чтобы вся строка была условной?

ответ

4

Ну, например, вы должны быть осведомлены о http://doc.rust-lang.org/stable/std/env/consts/constant.OS.html

Во-вторых, вы не можете действительно сделать это, точно. Вы можете использовать ящик lazy_static, но это все равно даст вам выделение.

В будущем, когда const fn стабилен, это должно быть проще.

+0

Является ли 'const fn' также доступным для таких вещей, как' const sqrt_of_two: f64 = (2.0) .sqrt() '? – LinearZoetrope

+0

Вы * можете * сделать это, злоупотребляя чертами макросов ... но вряд ли это того стоит. * Действительно * маловероятно. –

+0

@Jsor: Может быть. Неясно, в какой степени будет достигнута оценка времени компиляции (CTFE) Rust. Лично я нахожусь на «все, что является самодостаточным», но я не называю снимки :) –

Смежные вопросы