我在一生中遇到了一个rust编译错误

我在一生中遇到了一个rust编译错误,rust,lifetime,Rust,Lifetime,我试图编译一些生锈的代码,但是我不断地得到关于类型和生命周期的错误。谁能解释我做错了什么 编译过程中出现错误:关联的类型绑定必须在泛型参数之后声明。我想,我已经尝试了所有的参数组合,但它们似乎都不起作用 这是我的代码的简化版本 /*!编译的生存期测试*/ 外部板条箱网络视图; 使用web_视图::*; 结构用户数据{} 类型TestResult=WVResult; 类型TestView=WebView; 类型TestBuilder=WebView= WebViewBuilder; fn main

我试图编译一些生锈的代码,但是我不断地得到关于类型和生命周期的错误。谁能解释我做错了什么

编译过程中出现错误:
关联的类型绑定必须在泛型参数之后声明。我想,我已经尝试了所有的参数组合,但它们似乎都不起作用

这是我的代码的简化版本

/*!编译的生存期测试*/
外部板条箱网络视图;
使用web_视图::*;
结构用户数据{}
类型TestResult=WVResult;
类型TestView=WebView;
类型TestBuilder=WebView=
WebViewBuilder;
fn main(){
设p=UserData{};
let builder:TestBuilder=TestBuilder::new();//此处出错
让webview=builder
.title(“Progress”)//此处出错
.content(内容::Url(“https://en.m.wikipedia.org/wiki/Main_Page"))
.尺寸(640960)
.可调整大小(真)
.debug(false)
.用户数据(p)
.invoke_处理程序(处理程序)
.build()
.unwrap();
webview.run().unwrap();
}
fn处理程序(_webview:&mut TestView,_arg:&str)->TestResult{
正常(17作为i64)
}
问题
TestView
你的定义:

类型TestView=WebView;
WebView
定义为:

pub-struct-WebView{
内部:*多个CWebView,
_phantom:PhantomData=WebView=WebViewBuilderTestResult,String>;
WebViewBuilder
定义为:

发布结构WebViewBuilder
酒吧名称:&'a街,
发布内容:选项,
酒吧宽度:i32,
酒吧高度:i32,
酒吧可调整大小:bool,
酒吧调试:布尔,
发布调用处理程序:选项,
发布用户_数据:选项,
}
  • 'a
    生存期必须是第一个,在
    UserData
  • UserData
    期望使用寿命->
    UserData
    并且您说您想要
    Content
    ->
    Content::Html(“hello.to_string())
固定定义:

键入TestBuilder,String>;
WebViewBuilder
但即使你解决了所有这些问题,它也不会起作用。查看
WebViewBuilder
实现:

WebViewBuilder WVResult+'a的impl默认值
它需要
WVResult
(>
Result
),这意味着您不能使用
TestResult
(>
WVResult
->
Result
)。源代码中没有其他实现

一个例子 工作代码,它确实使用您的类型,但是
TestResult
只是
WVResult
i64
->
()

使用web_视图::*;
结构用户数据{}
类型TestResult=WVResult;
类型TestView;
键入TestBuilder,字符串>;
fn main(){
设p=UserData{};
让wvb:TestBuilder=WebViewBuilder::new();
让webview:TestView=wvb
.标题(“进度”)
.content(内容::Url(
"https://en.m.wikipedia.org/wiki/Main_Page“.to_string(),
))
.尺寸(640960)
.可调整大小(真)
.debug(false)
.用户数据(p)
.invoke_处理程序(Box::new(处理程序))
.build()
.unwrap();
让_res=webview.run().unwrap();
}
fn处理程序(_webview:&mut TestView,_arg:&str)->TestResult{
好(())
}

表示结果为
()
错误
否:表示结果为
T
错误
,如果未指定,默认值为
T=()
。OP指定了
T=i64
,这是完全有效的。噢,不要在早上回答。我会修好的。@Jmb谢谢,修好了。我更新了答案,我还发现不可能使用
WVResult
<必须使用code>(),因为
where
受到
I:FnMut(&mut WebView,&str)->WVResult+'a
等约束。我在原始帖子的末尾添加了一个新版本,因为它不适合评论。据推测,派生类型中的可见性存在一些问题。。。。也许我需要对板条箱提出一个问题,这不是关于能见度的问题。实现称为
I:FnMut(&mutwebview,&str)->WVResult+'a
。这意味着您的处理程序必须返回
WVResult
,而不是
WVResult
。我建议你看看。