В настоящее время Rust не поддерживает абстрагирование над изменчивостью.
Есть некоторые способы, которыми это может быть достигнуто, хотя они не идеальны:
unsafe
приведение результата, чтобы сделать его изменчивым. Ни один из них не очень привлекателен (макрос слишком многословный и немного менее читаемый, добавляет некоторый код-раздувание), unsafe
более читабельна, но было бы неплохо избежать, поскольку отличать от неизменяемого до изменяемого не так приятно иметь через базу кода.
На данный момент лучший вариант, насколько я могу видеть (где код для копирования не подходит), заключается в том, чтобы написать неизменяемую версию функции, а затем обернуть ее с помощью mut
версии функции, где бот h входы и выходы изменяемы.
Для этого требуется выход unsafe
на выходе функции, поэтому он не идеален.
Примечание: важно иметь неизменяемая функция содержит тело кода, так как обратное позволит случайным образом изменить то, что может быть неизменным.