Functional programming 在《铁锈》一书中,这一点怎么能被改写得不那么迫切呢
好吧,这仍然不是完美的,因为我不喜欢Functional programming 在《铁锈》一书中,这一点怎么能被改写得不那么迫切呢,functional-programming,rust,Functional Programming,Rust,好吧,这仍然不是完美的,因为我不喜欢I变量,但我的第一个目标是摆脱命令循环:)你已经很接近了!您的KeyValuePair和toHashMap实际上是,它在fromtiterator特性上工作,HashMap为(K,V)对实现 因此,它类似于[(k,v),(k,v),(k,v)]。move_iter()。collect::() 对于i部分,有,它将[a,b,c]转换为[(0,a)、(1,b)、(2,c)] 这就是最终结果: REGEX变量序列捕获iter(路径) .enumerate() .ma
I
变量,但我的第一个目标是摆脱命令循环:)你已经很接近了!您的KeyValuePair
和toHashMap
实际上是,它在fromtiterator
特性上工作,HashMap
为(K,V)
对实现
因此,它类似于[(k,v),(k,v),(k,v)]。move_iter()。collect::()
对于i
部分,有,它将[a,b,c]
转换为[(0,a)、(1,b)、(2,c)]
这就是最终结果:
REGEX变量序列捕获iter(路径)
.enumerate()
.map(|(i,matched)|(matched.at(1).to_string(),i))
.collect()
(您可以将
HashMap
留给推断,如果可以的话(例如,方法返回类型),或者在collect
调用中指定它,.collect::()
)您已经非常接近了!您的KeyValuePair
和toHashMap
实际上是,它在fromtiterator
特性上工作,HashMap
为(K,V)
对实现
因此,它类似于[(k,v),(k,v),(k,v)]。move_iter()。collect::()
对于i
部分,有,它将[a,b,c]
转换为[(0,a)、(1,b)、(2,c)]
这就是最终结果:
REGEX变量序列捕获iter(路径)
.enumerate()
.map(|(i,matched)|(matched.at(1).to_string(),i))
.collect()
(您可以将
HashMap
留给推断,如果可以的话(例如,方法返回类型),或者在collect
调用中指定它,。collect::()
)太棒了!谢谢。我可能应该把你列为我的楼层项目的贡献者;-)谢谢你的额外信息!是什么样的功能让我只写.collect::()
而不是.collect::()
?两种方法都可以。这只是类型推断的另一种形式吗?@Christoph,是的,这是局部类型推断。据我所知,这是锈病的最新特征。@Vladimitmaveev:我不知道这是最近引入的特征,尽管我只是在过去几个月才知道它。@ChrisMorgan,这是它的拉动请求:。它是在三月中旬引进的。事实上,它被称为“部分类型提示”。太棒了!谢谢。我可能应该把你列为我的楼层项目的贡献者;-)谢谢你的额外信息!是什么样的功能让我只写.collect::()
而不是.collect::()
?两种方法都可以。这只是类型推断的另一种形式吗?@Christoph,是的,这是局部类型推断。据我所知,这是锈病的最新特征。@Vladimitmaveev:我不知道这是最近引入的特征,尽管我只是在过去几个月才知道它。@ChrisMorgan,这是它的拉动请求:。它是在三月中旬引进的。它实际上被称为“部分类型提示”。
fn get_variable_info (route_path: &str) -> HashMap<String, uint> {
let mut map = HashMap::new();
let mut i = 0;
for matched in REGEX_VAR_SEQ.captures_iter(route_path) {
map.insert(matched.at(1).to_string(), i);
i = i + 1;
}
map
}
let mut i = 0;
REGEX_VAR_SEQ
.captures_iter(route_path)
.map(| matched | {
KeyValuePair{
key: matched.at(1).to_string(),
value: i
}
i = i + 1;
KeyValuePair
})
.toHashMap()