在Rust的Actix Web中生成无参数URL的方法求助
在Actix Web中生成无参数URL的解决方法
问题根源
url_for要求第二个参数是实现IntoIterator的类型,且迭代项需满足AsRef<str>约束。传入&[]时编译器无法推断空数组的具体元素类型,因此触发类型注解错误。
正确实现方式
以下几种方法都能高效生成无参数URL,避免无意义的内存消耗:
- 给空切片添加类型注解
明确指定切片元素为&str,让编译器能正确推断类型:
let login_url = req.request().url_for(website::RESOURCE_LOGIN, &[] as &[&str])?;
- 使用空迭代器
直接传入std::iter::empty(),这是专门的空迭代器实现,无需额外内存:
use std::iter::empty; let login_url = req.request().url_for(website::RESOURCE_LOGIN, empty())?;
- 创建空的字符串切片Vec
如果觉得切片注解麻烦,也可以传入空的Vec,同样能满足迭代器要求:
let login_url = req.request().url_for(website::RESOURCE_LOGIN, Vec::<&str>::new())?;
为什么之前的尝试失败
编译器自动提示的::<&[_; 0], &T>写法无效,因为T是未定义的类型参数。正确的做法是指定具体的元素类型(比如&str),而非泛型占位符。
另外,你之前用&[""]的做法没必要,它会额外创建一个空字符串元素,既浪费内存,还可能不符合路由的参数要求(即使路由无参数,传入空参数也属于多余操作)。
内容的提问来源于stack exchange,提问作者Luke Puplett
相关产品推荐
相关产品推荐

