2016-09-07 2 views
3

У Rust есть способ объявить функцию, где не используется ее результат, будет предупреждать - для любых типов?Можно объявить функции, которые будут предупреждать о неиспользованных результатах в Rust?

Что-то вроде GCC's __attribute__((warn_unused_result));?

+1

Я полагаю, что большинство случаев покрываются возвратом 'Option' или' Result'. –

ответ

6

Оказывается, что атрибут #[must_use] применим только к struct с, enum с и union с (union не доступен в стабильной Руст еще, хотя): source. Я думаю, это означает, что вы не можете переопределить его для функции.

5

Да, если вы не против упаковки указанных типов.

Атрибут #[must_use], как указано в @ljedrz, применяется только к типам. Однако, в Rust, создание новых типов безболезненно и не влияет на производительность. Поэтому просто заверните свой тип в MustUse<T> и попросите его решить эту проблему.

struct MustUse<T>(T); 
+0

Проблема с этим заключается в том, что вам тогда нужны пользователи API, чтобы знать об этом завернутом типе, если, например, они взяли 'usize', тогда им нужно взять' MustUse '. Я надеялся, что этого можно избежать, применив '# [must_use]' для псевдонимов типов, например: 'pub type MustUseUSize = usize ;, но атрибут в этом случае игнорируется. – ideasman42

+1

@ ideaman42: Или вы просто вызываете '.0' на результат функции, которая (1) считает, как использовать ее, и (2) разворачивает ее для ваших пользователей :) –

+0

Пока действительный ответ, общее ИМХО, это вызывает больше * повреждение * коду, тогда он решает. Если добавление '.0' на возвращаемые значения необходимо во всем, *« The Cure Worse Than The Disease »*, так сказать, (за пределами некоторых отдельных случаев, где это может быть приемлемо) – ideasman42

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