向预先存在的结构添加功能[重复]
Posted
技术标签:
【中文标题】向预先存在的结构添加功能[重复]【英文标题】:Add function to pre-existing struct [duplicate] 【发布时间】:2021-04-02 23:58:59 【问题描述】:我想将我自己的函数添加到我无法控制的预先存在的结构中。作为具体示例,我想创建一个 std::fs::File
let logfile = std::fs::OpenOptions::new().create(true).open("file.txt").unwrap();
然后我想以某种方式创建我自己的函数fn foo()
,这样我以后就可以做logfile.foo();
说实话,我不确定这是否可能。
【问题讨论】:
您的实例中是否有foo
依赖的特殊信息,或者File
实例中是否已经存在所有信息?如果所有信息都已经在File
实例中,那么您可以简单地使用foo
方法创建一个特征,然后为File
实现它。
【参考方案1】:
这正是特征可以用来做的事情。请参阅 Rust Book 中的“Traits: Defining Shared Behavior”。
简而言之,您可以定义自己的 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();
【讨论】:
以上是关于向预先存在的结构添加功能[重复]的主要内容,如果未能解决你的问题,请参考以下文章
从文本文件导入数据时向预先存在的字典键添加值(Python 3)
无法向 Mongoose 查询返回的对象添加新属性 [重复]