尽管Rust已经吸收了许多优秀的现代编程思想,但它看起来并没有呈现出一个非常基本的特征.
现代(伪)功能代码基于以下类型的大量类:
pub struct NamedTuple {
a: i8,
b: char,
}
impl NamedTuple {
fn new(a: i8, b: char) -> NamedTuple {
NamedTuple { a: a, b: b }
}
fn a(&self) -> i8 {
self.a
}
fn b(&self) -> char {
self.b
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这里有很多样板代码.没有样板代码,真的没有办法简单地描述这些类型吗?
是否可以编写一个函数,BufRead::fill_buf直到io::ErrorKind::Interrupted使用不安全方法调用该函数直到不再发生?
使用不安全的代码,它是:
use std::{
io::{self, BufRead},
slice,
};
fn fill_buf_and_ignore_interrupts(reader: &mut impl BufRead) -> io::Result<&[u8]> {
let (buf_ptr, buf_len) = loop {
match reader.fill_buf() {
Ok(buf) => (buf.as_ptr(), buf.len()),
Err(e) => {
if e.kind() != io::ErrorKind::Interrupted {
return Err(e);
}
}
}
};
Ok(unsafe { slice::from_raw_parts(buf_ptr, buf_len) })
}
Run Code Online (Sandbox Code Playgroud)
如果尝试使用return或break Ok(buf),则从借阅检查器收到错误消息:
error[E0499]: cannot borrow `*reader` as mutable more than once at a time
--> src/lib.rs:8:15
|
6 | fn fill_buf_and_ignore_interrupts(reader: &mut impl …Run Code Online (Sandbox Code Playgroud)