我知道super可以让您访问“父”范围,但是我偶然发现了 std::io 的这段代码,我不确定它是如何工作的。

pub fn copy<R: ?Sized, W: ?Sized>(reader: &mut R, writer: &mut W) -> io::Result<u64>
    where R: Read, W: Write
{
    let mut buf = [0; super::DEFAULT_BUF_SIZE];
    let mut written = 0;
    loop {
        let len = match reader.read(&mut buf) {
            Ok(0) => return Ok(written),
            Ok(len) => len,
            Err(ref e) if e.kind() == ErrorKind::Interrupted => continue,
            Err(e) => return Err(e),
        };
        writer.write_all(&buf[..len])?;
        written += len as u64;
    }
}

它如何访问super::DEFAULT_BUF_SIZE?我可以看到它是在sys_common::io中声明的,但是我看不到该模块如何成为util模块的父级。

最佳答案

函数 copy 的源位于 util 模块文件 io 导入的 mod.rs 模块中。由于DEFAULT_BUF_SIZEmod.rs中是defined,因此您需要通过superutil.rs访问它。

关于rust - 了解Rust中 “super”关键字的特定用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41125006/

10-15 09:55