如何解决如何解决未使用的生命周期?
在尝试在Rocket中创建简单的Web服务器时,我遇到了一个问题,我想根据以下特定条件重定向或发送html数据:
#[post("/test/<some_string>")]
// This doesn't work Redirect and Html are different types.
pub fn test(some_string: String) -> _ {
if validate(some_string) {
Redirect("/dashboard")
} else {
content::Html("<h1>Hello World</h1>")
}
}
这显然不起作用,因为Html
和Redirect
显然是不同的类型。然后,我尝试创建具有不同响应者类型的枚举,以便可以在同一函数中使用不同的响应者类型,这导致以下代码:
pub enum TwoResponders<'r,T: Responder<'r>,V: Responder<'r>> {
ResponderOne(T),ResponderTwo(V),}
impl<'r,V: Responder<'r>> Responder<'r> for TwoResponders<'r,T,V> {
fn respond_to(self,request: &Request) -> response::Result<'r> {
match self {
TwoResponders::ResponderOne(responder) => responder.respond_to(request),TwoResponders::ResponderTwo(responder) => responder.respond_to(request),}
}
}
但是,这也不起作用,因为现在Rust编译器抱怨寿命'r
在结构TwoResponders
中没有使用。我认为情况并非如此,因为它用于定义T和V需要具备的特征,Rust编译器却有不同的看法,并且它的最终含义一如既往。
我当时想添加一个PhantomData
,但是对于似乎并不难的事情,这似乎是一个非常丑陋的解决方案。
是否有更好的方法来解决此问题?
解决方法
在这种情况下,泛型类型边界需要一些其他未使用的类型参数或生存期,并且添加ArrayOfItems
会使事情变得不必要地丑陋,我发现最干净的方法是仅从类型本身中删除类型边界,并且只将它们放在PhantomData
块中:
impl
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。