У меня есть несколько регулярных выражений, которые определены во время выполнения, и я хотел бы сделать их глобальными переменными.Как скомпилировать Regexp глобальную переменную
Чтобы дать Вам идею, следующий код работает:
extern crate regex;
use regex::Regex;
fn main() {
let RE = Regex::new(r"hello (\w+)!").unwrap();
let text = "hello bob!\nhello sue!\nhello world!\n";
for cap in RE.captures_iter(text) {
println!("your name is: {}", cap.at(1).unwrap());
}
}
Но я хотел бы, чтобы это было что-то вроде этого:
extern crate regex;
use regex::Regex;
static RE: Regex = Regex::new(r"hello (\w+)!").unwrap();``
fn main() {
let text = "hello bob!\nhello sue!\nhello world!\n";
for cap in RE.captures_iter(text) {
println!("your name is: {}", cap.at(1).unwrap());
}
}
Однако, я получаю следующее сообщение об ошибке:
Compiling global v0.1.0 (file:///home/garrett/projects/rag/global)
src/main.rs:4:20: 4:56 error: method calls in statics are limited to constant inherent methods [E0378]
src/main.rs:4 static RE: Regex = Regex::new(r"hello (\w+)!").unwrap();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/main.rs:4:20: 4:56 help: run `rustc --explain E0378` to see a detailed explanation
src/main.rs:4:20: 4:47 error: function calls in statics are limited to struct and enum constructors [E0015]
src/main.rs:4 static RE: Regex = Regex::new(r"hello (\w+)!").unwrap();
^~~~~~~~~~~~~~~~~~~~~~~~~~~
src/main.rs:4:20: 4:47 help: run `rustc --explain E0015` to see a detailed explanation
src/main.rs:4:20: 4:47 note: a limited form of compile-time function evaluation is available on a nightly compiler via `const fn`
src/main.rs:4 static RE: Regex = Regex::new(r"hello (\w+)!").unwrap();
Означает ли это, что мне нужна ночная ржавчина, чтобы сделать эти переменные глобальными или существует er способ сделать это?
большое спасибо! Это работало удивительно хорошо! – vitiral
Кстати, можно опустить 'let re':' static ref RE: Regex = Regex :: new (...). Unwrap() 'должен работать. – huon
@huon Хорошая точка. Это потому, что Regex реализует Deref правильно? – squiguy