Изучая в данный момент Rust и Kotlin, мне интересно, может ли быть/реализовано в Rust что-то столь же аккуратное, как Scope-функции Kotlin (let
, apply
, run
и т.д.)?
Кажется, это то, что я искал, да! Хотите превратить это в ответ?
Я проголосовал за то, чтобы возобновить эту урезанную версию вопроса сейчас. Это более важно. И ожидаемый ответ тоже будет коротким и хорошим.
Похоже, что функции области видимости Kotlin не имеют эквивалента в стандартной библиотеке Rust, но эта функциональность доступна через методы расширения из популярного контейнера Tap.
Методы Tap запускают замыкание по заданному значению и возвращают исходное значение:
use tap::Tap;
let b = make_a()
.tap(|a| log!("The produced value was: {a}"))
.into_b();
Методы Pipe запускают замыкание по заданному значению и возвращают новое значение:
use tap::Pipe;
let c = make_a()
.pipe(|a| process_a_to_b(a))
.pipe(|b| process_b_to_c(b));
В Rust нет различия между функциями области видимости Kotlin, использующими it
и this
, поскольку замыкания Rust имеют только именованные параметры (и захваченные переменные), неявных имен параметров или неявного -this
нет.
Не ответ, так как не уверен, что это актуально, но вы проверили lib.rs/tap?