Курс във Факултета по Математика и Информатика към
СУ
Адаптери за итератори (част 1)
Краен срок
19.11.2024 18:00
Точки
2
Срокът за предаване на решения е отминал
usesolution::*;
#[test]
fntest_map_iter(){
letxs=&["x","xx","xxx"];
letmap_iter=MapIter::new(xs.iter(),|s|s.len());
assert_eq!(
map_iter.collect::<Vec<_>>(),
vec![1,2,3],
);
}
Напишете собствена имплементация на трансформиращ адаптер за итератори.
Първият вариант ще бъде generic. Структурата трябва да съдържа две полета:
iter: I - итератор
func: F - функция, която приема като аргумент стойности от тип елементите на итератора и връща стойности от друг тип
Очаква се да използвате директно подадените стойности за I и F - не са нужни Box, &dyn и други. Трябва да попълните generic параметрите, където е необходимо. Не всички места, на които трябва да сложите generic параметри, са указани. Можете да добавяте и допълнителни generic-и, освен I и F, където са ви необходими.
Трябва да имплементирате метод new и трейта Iterator за структурата.
Тази задача е главно упражнение върху синтаксиса, затова получавате финалния тест наготово.
Постарайте се кода ви да се компилира с него, за да изкарате точки (и не пропускайте pub-овете)
Compiling solution v0.1.0 (/tmp/d20241119-1739405-1b77lxj/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.71s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-3v1t2t/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.72s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-gzdi8f/solution)
Finished test [unoptimized + debuginfo] target(s) in 1.16s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-m1e2v5/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.78s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-9aja9z/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.82s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-9278dq/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.80s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-19pff3u/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.71s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-1tqnhti/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.71s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-10wspyn/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.73s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-1s0kp4e/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.72s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-9pcgnf/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.84s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-era8az/solution)
warning: function `main` is never used
--> src/lib.rs:39:4
|
39 | fn main() {}
| ^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: `solution` (lib) generated 1 warning
Finished test [unoptimized + debuginfo] target(s) in 0.79s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-hd9ef8/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.71s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
// let map_iter = MapIter::new(xs.iter(), |s| s.len());
//
// assert_eq!(
// map_iter.collect::<Vec<_>>(),
// vec![1, 2, 3],
// );
// }
Compiling solution v0.1.0 (/tmp/d20241119-1739405-1krt116/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.75s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-d8b3u7/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.70s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-4jp22x/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.68s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-hv4kcj/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.70s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-1y540t7/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.68s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-atbq3h/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.70s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-u4c6ve/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.99s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-xmg4l/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.99s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-26qxq9/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.71s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-143pzj4/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.75s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-5bfi1/solution)
error[E0282]: type annotations needed
--> tests/solution_test.rs:7:45
|
7 | let map_iter = MapIter::new(xs.iter(), |s| s.len());
| ^ - type must be known at this point
|
help: consider giving this closure parameter an explicit type
|
7 | let map_iter = MapIter::new(xs.iter(), |s: /* Type */| s.len());
| ++++++++++++
For more information about this error, try `rustc --explain E0282`.
error: could not compile `solution` due to previous error
// generic Iterator, Function and return type T used throughout the impl
impl<I,F,T>MapIter<I,F>
where
I:Iterator,
F:FnMut(I::Item)->T,
{
pubfnnew(iter:I,func:F)->MapIter<I,F>{
Self{iter,func}
}
}
// impl trait Iterator with its required Item field and
// next method. Item is returned by the iterator, if Some()
impl<I,F,T>IteratorforMapIter<I,F>
where
I:Iterator,
F:FnMut(I::Item)->T,
{
typeItem=T;
fnnext(&mutself)->Option<Self::Item>{
self.iter.next().map(&mutself.func)
}
}
Compiling solution v0.1.0 (/tmp/d20241119-1739405-1mhu2nc/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.71s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-1gdqg8a/solution)
Finished test [unoptimized + debuginfo] target(s) in 0.70s
Running tests/solution_test.rs (target/debug/deps/solution_test-1428e1090729d165)
running 1 test
test solution_test::test_map_iter ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Compiling solution v0.1.0 (/tmp/d20241119-1739405-eg22ao/solution)
error[E0282]: type annotations needed
--> tests/solution_test.rs:7:45
|
7 | let map_iter = MapIter::new(xs.iter(), |s| s.len());
| ^ - type must be known at this point
|
help: consider giving this closure parameter an explicit type
|
7 | let map_iter = MapIter::new(xs.iter(), |s: /* Type */| s.len());
| ++++++++++++
For more information about this error, try `rustc --explain E0282`.
error: could not compile `solution` due to previous error