// 定义特征Transformer
trait Transformer<T> {
fn transform(&self, value: T) -> T;
}
// 实现transform_collection函数
fn transform_collection<T, I, C>(collection: C) -> C
where
C: IntoIterator<Item = T>,
C: FromIterator<T>,
T: Transformer<T>,
{
collection.into_iter()
.map(|item| item.transform(item))
.collect()
}
// 测试代码
#[cfg(test)]
mod tests {
use super::*;
// 实现一个简单的Transformer实例用于测试
struct AddOne;
impl Transformer<i32> for AddOne {
fn transform(&self, value: i32) -> i32 {
value + 1
}
}
#[test]
fn test_transform_collection() {
let original = vec![1, 2, 3];
let result = transform_collection::<i32, _, Vec<i32>>(original);
let expected = vec![2, 3, 4];
assert_eq!(result, expected);
}
}