quizzes
This commit is contained in:
37
practice/src/bin/d_wrapper.rs
Normal file
37
practice/src/bin/d_wrapper.rs
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user