我知道 Rust 没有变量。我知道宏是模拟它们的一种可能方法。然而,我对如何将特征用于此目的感兴趣。
例如,Bevy ECS 系统可以采用签名中具有任意参数组合的函数,前提是参数实现给定的特征。
我想更好地了解这个机制是如何运作的。
它实际上不是任意数量的类型参数; Rust 还不支持这一点。最常见的解决方案是使用宏来生成多个类型参数的实现,最多可达某个固定限制。例如,通过
Reflect
宏here实现最多 12 个类型参数。这在整个 stdlib 中也很常见,它也使用它(例如,实现
macro_rules!
,反之亦然,对于
From<(T, ..., T)> for [T; N]
最多 12 个)。