Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 锈型别名会导致寿命问题_Rust_Lifetime - Fatal编程技术网

Rust 锈型别名会导致寿命问题

Rust 锈型别名会导致寿命问题,rust,lifetime,Rust,Lifetime,我试图通过引入类型别名来缩短函数签名。 参数的类型规范如下所示 writer: Arc<Mutex<&mut (dyn AsyncWrite + Unpin + Send + Sync)>> // working writer:Arc//working 我认为通过引入这种类型的别名可以缩短它 pub type RefAsyncWriter<'a> = &'a mut (dyn AsyncWrite + Unpin + Send + Syn

我试图通过引入类型别名来缩短函数签名。 参数的类型规范如下所示

writer: Arc<Mutex<&mut (dyn AsyncWrite + Unpin + Send + Sync)>>  // working
writer:Arc//working
我认为通过引入这种类型的别名可以缩短它

pub type RefAsyncWriter<'a> = &'a mut (dyn AsyncWrite + Unpin + Send + Sync);
pub-type-RefAsyncWriter src/main.rs:13:31
|
13 |异步fn w(编写器:Arc){

|^^^^^^^^^-帮助:指示匿名生存期:`由于在类型别名中引入了显式生存期
'a
,因此在使用此类型时需要指定它

async fn w>>){
它似乎在你提供的操场上起作用

正如编译器所建议的,匿名litetime是等效的

async fn w(编写器:Arc
notation)。
但同样,如果在使用时不可能出现混淆,则匿名生存期
将重复两次(在函数名之后和参数中)。

由于在类型别名中引入了显式生存期
'a
,因此在使用此类型时需要指定它

async fn w>>){
它似乎在你提供的操场上起作用

正如编译器所建议的,匿名litetime是等效的

async fn w(编写器:Arc
notation)。
但是,如果在使用时不可能出现混淆,则匿名生存期
将重复两次(在函数名之后,在参数中).

非常感谢,这是可行的。我确实看到了编译器的建议,但我真的不知道该将丢失的生命放在哪里。老实说,我仍然不明白为什么它会这样工作,但无论如何,它解决了我目前的问题。是的,编译器强制我们在这里显式,以避免ide是类型别名中的引用。一开始有点让人困惑,但如果此处未明确指定生存期,可能会出现更让人困惑的情况。再次感谢您的帮助。非常感谢,这很有效。我确实看到了编译器的建议,但我真的无法确定将丢失的生存期放在何处。到老实说,我仍然不明白为什么它是这样工作的,但无论如何,它暂时解决了我当前的问题。是的,编译器强制我们在这里显式,以避免在类型别名中隐藏引用,这实际上是有道理的。一开始有点混乱,但在某个时候,如果此处未明确指定生存期。再次感谢您的帮助。
writer: Arc<Mutex<RefAsyncWriter>>  // error[E0726]: implicit elided lifetime not allowed here
use tokio::io::AsyncWrite;
use tokio::fs::File;
use std::sync::{Arc,Mutex};
use std::path::PathBuf;
pub type RefAsyncWriter<'a> = &'a mut (dyn AsyncWrite + Unpin + Send + Sync);

#[tokio::main]
async fn main() {
    let f = File::create(PathBuf::from("/tmp/test.txt")).await.unwrap();
    w(Arc::new(Mutex::new(&mut f)));
}

async fn w(writer: Arc<Mutex<RefAsyncWriter>>) {
  // TODO
}
Compiling playground v0.0.1 (/playground)
error[E0726]: implicit elided lifetime not allowed here
  --> src/main.rs:13:31
   |
13 | async fn w (writer: Arc<Mutex<RefAsyncWriter>>) {}
   |                               ^^^^^^^^^^^^^^- help: indicate the anonymous lifetime: `<'_>`

error: aborting due to previous error