我想创建一种在Rust中动态更改对象功能的方法,类似于在CLISP或Groovy等语言中更改MetaObject的方式.
其思想是通过某种类型的接口或指向可变指针的指针向用户(或其他组件)提供黑盒,而可变指针又指向可变 struct .这样,功能的accessing的平均值不会改变,但底层实现可以动态改变(最好是创建一个新 struct ,然后将可变指针指向它,然后销毁旧 struct ).目前,我正试图弄清楚如何做到这一点,同时让借阅判断员满意.
简而言之: {外部(不可变)指针}->;{私有可变指针}->;{可变(或可替换) struct }
这样做的目的是让人工智能或其他程序有一种手段来动态改进对象或方法,同时保持与程序其余部分的相同接口,这样就不会中断(相同的输入和输出,但底层代码可以改变).
如果你有什么 idea ,请告诉我.
目前正试图让borrow 判断沿着这一点,而调用'println!'.目前得到一个错误,说Mobj没有实现Copy trait.
#[derive(Debug)]
struct Mobj {
str: String
}
let mut m_ptr = Mobj {str: String::from("Object 1")};
let ptr = m_ptr;
println!("{:?}", m_ptr.str);
println!("{:?}", ptr.str);
// Reassign pointer to new object
let m_ptr = Mobj {str: String::from("Object 2")};
println!("{:?}", m_ptr.str);
println!("{:?}", ptr.str); // Call to same, unchanged immutable pointer that points to mutable pointer
// ^^^^ Still points to old 'Object 1'
// Now points to the new 'Object 2', but might not be doing exactly what I want it to do.
let ptr = &m_ptr;
println!("{:?}", ptr.str);