【发布时间】:2023-02-16 00:47:40
【问题描述】:
我是 Rust 的新手,只是想知道 Rust 中是否有等同于 keyof(如 TypeScript 中)的运算符。
我不知道这是否可能,但我正在尝试访问另一个结构中结构的键和值。
例子:
interface Events {
msg:(data:string)=>any,
abort:()=>any
}
class EventEmitter<T>{
on(event: keyof T,callback:T[keyof T])
}
我正在尝试在 Rust 中实现相同的 on 功能。
struct Events {
msg: Fn(&str)->(),
abort: Fn()->(),
}
struct EventEmitter<T> {
pub listeners: Vec<Listener<T>>,
}
上下文:我正在尝试像 node.js & ts 一样重新创建EventEimtter
【问题讨论】:
-
你到底想做什么?您不能像在动态语言中那样通过字符串名称访问结构成员。
-
@PitaJ 我正在尝试像在 node.js 中一样重新创建 EventEmitter 以用于学习目的,从而创建相同的功能。
-
这根本没有帮助,因为您不能假设使用 Rust 的人对您要重现的内容有任何线索,但您从不解释它是什么,或者您实际上想要实现什么。然而,规则是,尝试 1:1 地在另一种语言中重现一种语言的功能往往不是一个好主意,尤其是当所讨论的两种语言分别是动态类型和弱类型时;并且几乎没有任何反射的静态类型。关于这个主题的经典文章是Python is not Java。
-
@Masklinn 感谢您花时间澄清。正如我提到的,我是 Rust 的新手,可能会问一些看起来很愚蠢或不清楚的问题。我也可能在没有意识到的情况下尝试应用另一种语言的逻辑。对于那个很抱歉
-
不,在 Rust 中没有像
keyof运算符这样的东西存在。您可能可以通过编写特征来实现类似的目的,但您绝对不能对字符串进行强类型化。
标签: rust