Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/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 Can';t调用tokio::fs::File上的poll_read_Rust_Rust Tokio_Tokio - Fatal编程技术网

Rust Can';t调用tokio::fs::File上的poll_read

Rust Can';t调用tokio::fs::File上的poll_read,rust,rust-tokio,tokio,Rust,Rust Tokio,Tokio,我有一个包含Filestruct的结构,我希望这个结构实现AsyncReadtrait,以便在代码的其他部分可以使用它来代替File: struct TwoWayFile<'a> { reader: &'a File, } impl<'a> AsyncRead for TwoWayFile<'a> { fn poll_read( mut self: Pin<&mut Self>, c

我有一个包含
File
struct的结构,我希望这个结构实现
AsyncRead
trait,以便在代码的其他部分可以使用它来代替
File

struct TwoWayFile<'a> {
    reader: &'a File,
}

impl<'a> AsyncRead for TwoWayFile<'a> {
    fn poll_read(
        mut self: Pin<&mut Self>,
        cx: &mut Context<'_>,
        buf: &mut [u8],
    ) -> Poll<io::Result<usize>> {
        self.reader.poll_read(cx, buf)
    }
}

这里少了什么?为什么我不能调用已为
文件定义的方法?

您的问题可能是
轮询读取
方法是在
Pin
上实现的,而不是在
&self
上实现的。这意味着您只能在固定的可变引用上调用它,而不能在普通引用上调用它


您可以使用
Box::pin将引用固定在堆上,或者使用
pin\mut将引用固定在“异步堆栈”上宏,然后应该能够调用该方法。

我将结构中对
文件的引用替换为一个值,并在
Pin
上调用
poll\u read
,它成功了!谢谢
error[E0599]: no method named `poll_read` found for reference `&'a tokio::fs::file::File` in the current scope
  --> src/main.rs:44:21
   |
44 |         self.reader.poll_read(cx, buf)
   |                     ^^^^^^^^^ method not found in `&'a tokio::fs::file::File`