我有一个类型的“A”,和各种特征,定义的行为,可以做的A。
struct A {
pub foo: String;
... etc
}
trait BigChange {
fn big_change(a: A) -> A
}
trait SmallChange {
fn small_change(a: A) -> A
}
struct AConcreteBigImplementation;
impl BigChange for AConcreateBigImplementation {
fn big_change ...
}
struct AnotherConcreteBigImplementation;
impl BigChange for AnotherConcreateBigImplementation {
fn big_change ...
}
struct AConcreteSmallImplementation;
impl SmallChange for AConcreteSmallImplementatio {
fn small_change ...
}
我试图创建一个枚举,可以引用任何行为,例如。
// Doesn't work
enum ChangeA {
BigChangeOperation(BigChange),
SmallChangeOperation(SmallChange)
}
这样我就可以轻松地传递特定的操作,并测试它们是BigChange还是SmallChanges,例如:
let oldA = A::new( ... );
match some_change {
BigChange(b) => let newA = b(oldA)
SmallChange(s) => let newA = s(oldA)
}
我有点理解,也许rust想在编译时知道一个特定的函数,所以也许装箱的值会有所帮助,但它没有
// Better?
enum ChangeA {
BigChangeOperation(Box<BigChange>),
SmallChangeOperation(Box<SmallChange>)
}
有没有可能像这样为枚举值指定一个trait,或者我错过了枚举值中传递的类型,trait,具体值之间的区别。?
Tia
1条答案
按热度按时间35g0bw711#
这似乎起作用: