如何正确使用期望在循环中使用方法链接的构建器模式?以log4rs的示例为例。请注意,在
以下操作会导致错误,因为(我认为)
appender
中,self
不是引用。//builder pattern from log4rs
pub struct ConfigBuilder {
appenders: Vec<Appender>,
loggers: Vec<Logger>,
}
impl ConfigBuilder {
pub fn appender(mut self, appender: Appender) -> ConfigBuilder {
self.appenders.push(appender);
self
}
}
以下操作会导致错误,因为(我认为)
cb
被移动到由.appender()
返回的内存中。let cb = ConfigBuilder::new();
for x in ys {
cb.appender(x);
}
这个看起来是可行的。这是唯一的方法吗?
let mut cb = ConfigBuilder::new();
for x in ys {
cb = cb.appender(x);
}
appender
接管并返回新的构建器,因此你需要将返回值放在某个地方。你是有意选择这种设计的吗?如果你想让第一个示例循环起作用,你需要传递一个可变的 self 引用。 - loganfsmyth