我想将自己的函数添加到一个现有的结构体中,但这个结构体不在我的控制之下。具体例子是我想创建一个 std::fs::File
实例。
let logfile = std::fs::OpenOptions::new().create(true).open("file.txt").unwrap();
我希望能够创建自己的函数fn foo()
,以便之后可以使用logfile.foo();
。但说实话,我不确定这是否可行。
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");
}
}
此外,您的 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();
}
foo
所依赖的特殊信息,或者所有信息都已经在File
实例中了?如果所有信息都已经在File
实例中,那么你可以简单地创建一个带有foo
方法的 trait,然后为File
实现它。 - Aplet123