我有以下(简化)情况:
trait Z {
fn apply(&self);
}
struct X { ... }
impl Z for X { ... }
struct Y { ... }
impl Z for Y { ... }
fn some_func() {
... do_some_stuff_and_initialise_variables
let x: X = ...;
let y: Y = ...;
for z in &[x, y] { // does not work what is the type of z?
... doing a lot of stuff involving a lot of the variables initialised in the outer scope
z.apply();
}
}
字符串
Rust处理这种情况的方式是什么?
当然,我可以为在for循环中执行的块提取一个泛型函数,但是我必须显式地为所有外部作用域中的变量创建函数参数,这会产生很多开销,所以我想避免这种情况。
我也可以使用dyn Z
类型,但这可能意味着运行时开销,我也想避免,因为在这种情况下不需要它。
2条答案
按热度按时间disbfnqx1#
不知道你的尝试在哪里失败了,但是宏工作得很好,关键是在初始化的变量已经在作用域中的地方定义它,这样你就可以访问它们:
字符串
或者,像建议的那样,你可以使用动态分派:
型
k4emjkb12#
另一种解决方案是使用
enum
模拟动态分派(由于enum_dispatch
,这可以自动化)。字符串