变量不在Rust中的匹配范围内

变量不在Rust中的匹配范围内,rust,Rust,I使用实现以下拖放功能: fn handleImageDrag(t:&mut按钮,e:Event)->bool{ 设mut dnd=false; 让mut release=false; 匹配e{ 事件::DndEnter=>{ dnd=真; println!(“{}”,“输入了!”); println!(“DndEnter处的dnd值为:{}”,dnd); 真的 } 事件::DndDrag=>true, 事件::DndRelease=>{ 释放=真; println!(“DndRelease的释

I使用实现以下拖放功能:

fn handleImageDrag(t:&mut按钮,e:Event)->bool{
设mut dnd=false;
让mut release=false;
匹配e{
事件::DndEnter=>{
dnd=真;
println!(“{}”,“输入了!”);
println!(“DndEnter处的dnd值为:{}”,dnd);
真的
}
事件::DndDrag=>true,
事件::DndRelease=>{
释放=真;
println!(“DndRelease的释放值为:{}”,已释放);
真的
}
事件::粘贴=>{
println!(“{}”,“确实粘贴了!”);
println!(“粘贴时的dnd值为:{}”,dnd);
println!(“粘贴时释放的值为:{}”,已释放);
//println!(“{}”,已发布);
如果dnd已发布(&D){
让img=image::open(“imgs/3.jpg”).unwrap();
让缩略图=img.resize(400400,FilterType::Lanczos3);
设(x,y)=缩略图.dimensions();
设rgb=RgbImage::新建(&thumbnail.to_bytes(),x,y,3)。展开();
t、 设置_图像(一些(rgb));
dnd=假;
释放=假;
真的
}否则{
假的
}
}
事件::DndLeave=>{
dnd=假;
释放=假;
真的
}
_=>错误,
}
}
testBut2.handle2(move | t,ev{handleImageDrag(t,ev)});
//拖放然后打印:
他进来了!
DndEnter处的dnd值为:真
DND释放值为:真
我做了粘贴!
粘贴时的dnd值为:false
粘贴时释放的值为:false
我已经初始化了dnd并将其作为可变布尔值发布,因此我认为可以在函数的match{}部分更改它们的值。dnd和Release的值分别在DnDEnter和DndRelease中更改,但当我在Paste中访问这些值时,它们不是更新的值。变量是否超出范围?

这对我来说很有效:

让mut dnd=false;
让mut release=false;
imgSlot1.handle2(移动| t,ev |{handleImageDrag(t,ev,&mut-dnd,&mut-released)});
fn handleImageDrag(t:&mut按钮,e:Event,dnd:&mut bool,released:&mut bool)->bool{
//设mut dnd=false;
//让mut release=false;
匹配e{
事件::DndEnter=>{
*dnd=真;
println!(“{}”,“输入了!”);
println!(“DndEnter处的dnd值为:{}”,dnd);
真的
}
事件::DndDrag=>true,
事件::DndRelease=>{
*释放=真;
println!(“DndRelease的释放值为:{}”,已释放);
真的
}
事件::粘贴=>{
println!(“{}”,“确实粘贴了!”);
println!(“粘贴时的dnd值为:{}”,dnd);
println!(“粘贴时释放的值为:{}”,已释放);
//println!(“{}”,已发布);
如果*dnd&&*已发布{
让img=image::open(“imgs/3.jpg”).unwrap();
让缩略图=img.resize(400400,FilterType::Lanczos3);
设(x,y)=缩略图.dimensions();
设rgb=RgbImage::新建(&thumbnail.to_bytes(),x,y,3)。展开();
t、 设置_图像(一些(rgb));
*dnd=假;
*释放=假;
真的
}否则{
假的
}
}
事件::DndLeave=>{
*dnd=假;
*释放=假;
真的
}
_=>错误,
}
}

您在函数中声明变量,因此值只存在于一个函数调用中。它们不会在函数调用之间修改,当它是
Event::Paste
@Deadbeef时,它将始终是
false
。那么,在声明函数中的变量时,如何保留这些函数调用之间的值呢?如果不将其声明为
互斥体,rust中就没有(安全的)可变全局变量。如果您将函数指针传递给另一个指针,请考虑使用闭包,这样您就可以在调用之间更改捕获值。