了解" super"的具体用法Rust中的关键字

时间:2016-12-13 15:40:31

标签: rust

我了解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模块的父级。

2 个答案:

答案 0 :(得分:3)

功能copy的来源位于由util的模块文件io导入的mod.rs模块中。由于DEFAULT_BUF_SIZE中的mod.rsdefined,您需要通过super中的util.rs访问它。

答案 1 :(得分:2)

我认为你错过了一个定义,如果你查看std/io/mod.rs,你会看到:

const DEFAULT_BUF_SIZE: usize = 8 * 1024;

这就是全部。