Rust GUI - 德鲁伊 - 复杂状态/模糊关联类型的镜头



我正在尝试在深度超过一级的状态上使用小部件镜头。下面是一个简化的示例:

#[derive(Clone, Debug, Data, Lens)]
struct State {
user: User
}
#[derive(Clone, Debug, Data, Lens)]
struct User {
name: String
}

所有镜头示例都显示了使用镜头,其中存在没有任何嵌套对象的单一状态。如:

#[derive(Clone, Debug, Data, Lens)]
struct MyComplexState {
#[lens(name = "term_lens")]
term: String,
scale: f64,
}
fn some_gui_builder() {
...
let searchbar = TextBox::new().lens(MyState::term_lens);
...
}

我尝试使用嵌套状态执行此操作,例如:

let some_input = TextBox::new().lens(State::user::name);

。但它似乎不起作用。我收到一个不明确的类型错误

ambiguous associated type
help: use fully-qualified syntax: `<state::State as Trait>::user`rustc(E0223)

我在这里不知所措。我认为既然玩家和国家都实现了镜头,所以它是模棱两可的?但是,如果我实现它,例如<状态::状态作为镜头>::用户或<状态::状态作为小部件>::用户,则错误地指出它无法在Widget上找到user

您可以使用.then链接镜头

let some_input = TextBox::new().lens(State::user.then(User::name));

最新更新