Почему std :: pani c :: Location :: caller не возвращает Option? - PullRequest
0 голосов
/ 17 марта 2020

Определение Location::caller гласит:

pub fn caller() -> &'static Location<'static>`

? Это экспериментальный API только для ночи. (track_caller # 47809 )

Возвращает исходное местоположение вызывающего абонента этой функции. Если вызывающая функция аннотирована, то будет возвращено место ее вызова, и так далее в стеке до первого вызова в теле неотслеживаемой функции.

Это звучит так, как будто должно вернуться &'static Option<Location<'static>>. Кажется, что-то еще делает ход стека вызовов намного сложнее, чем могло бы быть.

Есть ли веская причина для такого решения?

1 Ответ

2 голосов
/ 17 марта 2020

Невозможно, чтобы у запущенной функции не было вызывающей стороны, поэтому нет времени, когда None будет возможным возвращаемым значением.

Вы можете быть смущены предложенным на первый взгляд плохо сформулированным выражением:

Если вызывающий этой функции аннотирован [sic], то будет возвращено место его вызова

Это, вероятно, следует сформулировать как «аннотированный #[track_caller]». Это означает, что когда атрибут присутствует, это как если бы функция не существовала и была вставлена ​​в текстовую строку, откуда она была вызвана.

См. Также:

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