Почему я должен использовать SendStr (over & str или String) для свойства message в структуре ошибок в Rust?

Я нашел это отличное сообщение в блоге об обработке ошибок в Rust.

Он определяет структуру ошибок как таковую:

struct ProgramError {
 kind: ProgramErrorKind,
 message: SendStr
}

В сообщении используется SendStr, который является псевдонимом типа для MaybeOwned<'static>. Я понимаю, что это может содержать либо &str, либо String, но документация немного расплывчата в отношении его использования.

Это может быть полезно в качестве оптимизации, когда иногда требуется распределение, но не всегда.

Я хотел бы понять, почему вы хотели бы выбрать SendStr над &str или String в случае определения класса ProgramError.

1 ответ

SendStr - это String или &'static str, что позволяет эффективно работать в общем случае с использованием строкового литерала (нет необходимости выделять новое значение каждый раз), имея возможность использовать динамическое значение if необходимо.

Почему бы не использовать &str все время? Ну, либо вам нужно будет сделать только статические строки, либо пользователю нужно будет хранить строку где-нибудь еще в случае динамических значений, и поэтому передача ошибки вокруг (в первую очередь, вверх по стеку) будет сложнее.

licensed under cc by-sa 3.0 with attribution.