function - 将函数添加到预先存在的结构
问题描述
我想将自己的函数添加到我无法控制的预先存在的结构中。作为具体的例子,我想创建一个实例std::fs::File
let logfile = std::fs::OpenOptions::new().create(true).open("file.txt").unwrap();
然后我想以某种方式创建自己的功能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");
}
}
此外,您缺少对或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();
}
推荐阅读
- c++ - 动态特征矩阵随机初始化
- excel - 将列表的随机顺序返回到单个单元格中
- angular - 剑道网格过滤器菜单和角度材质选择 - 每当您进行选择时关闭
- apache-kafka - Kafka 压缩主题,retention.ms 是否适用于它们?
- php - Woocommerce 菜单 - 在另一只父猫中隐藏一个父类别
- sql - 将所有行更新为相同的值或仅更新某些行?
- python - Tkinter - 不均匀的帧重叠
- r - 访问 str_locate 和 str_locate_all 的索引
- php - Laravel 与多个表的雄辩关系
- maven - 使用 Maven + Flyway 迁移/清理/等多个数据库