Нежелательный апостроф убегает в Err () - PullRequest
1 голос
/ 20 сентября 2019

Err () принудительно добавляет «\» экранирование вокруг апострофов.Поиск находит старые жалобы об этой проблеме, но без видимого решения.

Как можно избежать этих внедренных апострофов в строках Err?

fn bad() -> Result<(), String> {
    return Err("Can't avoid 'apostrophe' escapes.".to_string());
}

fn main() -> Result<(), String> {
    println!("{}", "Can avoid 'apostrophe' escapes.".to_string());
    bad()?;
    Ok(())
}

Результатов:

Can avoid 'apostrophe' escapes.
Error: "Can\'t avoid \'apostrophe\' escapes."

1 Ответ

5 голосов
/ 20 сентября 2019

Регистратор по умолчанию для main, возвращающий Result, должен использовать Debug для отображения ошибки.Debug в String всегда экранирует ' с.

Если вы хотите изменить это поведение, вы должны самостоятельно обработать ошибку:

fn bad() -> Result<(), String> {
    return Err("Can't avoid 'apostrophe' escapes.".to_string());
}

fn my_main() -> Result<(), String> {
    println!("{}", "Can avoid 'apostrophe' escapes.".to_string());
    bad()?;
    Ok(())
}

fn main() {
    if let Err(e) = my_main() {
        println!("Error: {}", e);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...