相关疑难解决方法(0)

在Rust中是否可以反射,如果是这样,我如何使用一些参数调用未知函数?

我很开心玩Rust很长一段时间都是C#程序员,但我对反思有疑问.

嗯,我认为反思,也许我不需要在这种情况下进行反思,但鉴于Rust是强烈打字我怀疑我做的(我肯定需要它在好的'C#,祝福它的棉袜).

是的,所以说我有这种情况:

use std::collections::HashMap;

fn invoke_an_unknown_function(
    hashmap: HashMap<String, String>,
    // Something to denote a function I know nothing about goes here
) {
    // For each key in the hash map, assign the value
    // to the parameter argument whose name is the key
    // and then invoke the function
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我猜我需要传递一些MethodInfo作为函数的第二个参数,然后用它来解决它的名字是哈希映射中的键的参数并分配值,但我看了一下反射API并发现以下内容:

但他们都没有给我足够的继续开始.那么,我将如何实现上面描述的功能呢?

reflection rust

11
推荐指数
1
解决办法
6240
查看次数

习惯性的替代反射

我试图根据配置字符串选择摘要算法(来自rust-crypto).在Python或JavaScript中,比方说,我可能会使用反射来实现:

getattr(Digest, myAlgorithm)
Run Code Online (Sandbox Code Playgroud)

...但是从我能够使用谷歌开始,这不是像Rust这样的语言的最佳实践(而且我没有找到关于如何完成的细节).我最初的想法是使用模式匹配:

let mut digest = match myAlgorithm {
  "sha256" => Sha256::new(),
  ...
};
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用,因为虽然匹配的所有分支实现相同的特征,但它们最终是不同的类型.此外,假设有一种解决方法,在代码中手动枚举所有这些选项是很麻烦的.

在Rust中这样做的正确方法是什么?

reflection rust

6
推荐指数
1
解决办法
390
查看次数

标签 统计

reflection ×2

rust ×2