Mar*_*rio 5 struct file function rust
我想将我自己的函数添加到我无法控制的预先存在的结构中。作为具体示例,我想创建一个实例std::fs::File
let logfile = std::fs::OpenOptions::new().create(true).open("file.txt").unwrap();
Run Code Online (Sandbox Code Playgroud)
然后我想以某种方式创建我自己的函数fn foo(),以便我以后能够做到logfile.foo();
老实说,我不确定这是否可能。
这正是特质的用途。请参阅Rust 书中的“特征:定义共享行为”。
简而言之,您可以定义自己的方法trait Foo并向其添加例如fn foo(&self)方法,然后impl Foo for std::fs::File,它允许您调用logfile.foo().
trait Foo {
fn foo(&self);
}
impl Foo for File {
fn foo(&self) {
println!("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您还缺少对或 的OpenOptions呼叫。否则,您将收到错误。write()append()InvalidInput
这是一个完整的示例:
use std::fs::{File, OpenOptions};
trait Foo {
fn foo(&self);
}
impl Foo for File {
fn foo(&self) {
println!("foo");
}
}
fn main() {
let logfile = OpenOptions::new()
.write(true) // or `.append(true)`
.create(true)
.open("file.txt")
.unwrap();
logfile.foo();
}
Run Code Online (Sandbox Code Playgroud)