This commit is contained in:
10 changed files with 257 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
// Создайте структуру Wrapper<T> с одним полем value: T:
// ● Реализуйте метод map<U, F>(self, f: F) -> Wrapper<U>, где F: FnOnce(T) -> U.
// ● Метод должен применāтþ функøиĀ f к value и возвраûатþ новýй Wrapper с резулþтатом.
#![allow(clippy::approx_constant)]
struct Wrapper<T> {
value: T,
}
impl<T> Wrapper<T> {
// Создаем новый Wrapper
fn new(value: T) -> Self {
Self { value }
}
// Применяем функцию к значению и возвращаем новый Wrapper
fn map<U>(self, f: impl FnOnce(T) -> U) -> Wrapper<U> {
Wrapper::new(f(self.value))
}
}
fn main() {
// Пример из задания
let w = Wrapper { value: 42 };
let w2 = w.map(|x| x.to_string());
println!("{}", w2.value); // "42"
// Дополнительные примеры
let w3 = Wrapper::<f64>::new(3.14);
let w4 = w3.map(|x| x.floor() as i32);
println!("{}", w4.value); // 3
let w5 = Wrapper::new("hello");
let w6 = w5.map(|s| s.len());
println!("{}", w6.value); // 5
}