相关疑难解决方法(0)

Rust如何实现反射?

Rust具有这种Any特性,但它也有"不支付你不使用的"政策.Rust如何实现反射?

我的猜测是Rust使用了懒惰标记.每个类型最初都是未分配的,但是稍后如果将类型的实例传递给期望Any特征的函数,则为该类型分配一个TypeId.

或者Rust TypeId可能会在其实例可能传递给该函数的每种类型上放置一个?我想前者会很贵.

reflection rust

46
推荐指数
1
解决办法
9926
查看次数

如何反省Rust中所有可用的方法和成员?

有没有办法在Rust中打印出类型或实例的可用成员的完整列表?

如果问这个问题是Python,那么答案就是print(dir(object)).
如果问题是C,那么Clang有一个Python API可以解析C代码并对其进行内省.

不熟悉Rust工具,我很想知道是否有某种方法可以在运行时或编译时,使用编译器功能(例如宏)或使用外部工具来执行类似的操作.


请注意,这个问题是故意的,因为使用的确切方法不一定非常重要.给定一个变量,是否有办法找到它的所有方法和功能并不是一个不寻常的目标,但不能很好地了解这个领域,我不是将问题局限于特定方法.

introspection rust

13
推荐指数
3
解决办法
2212
查看次数

打印Rust中的所有struct字段

我有大约10个结构,每个结构之间有5-10个字段,我希望能够使用相同的格式将它们打印出来。

我的大多数结构如下所示:

struct Example {
  a: Option<String>,
  b: Option<i64>,
  c: Option<String>,
  ... etc
}
Run Code Online (Sandbox Code Playgroud)

我希望能够定义一个implfor,fmt::Display而不必再次枚举字段,因此,如果添加了新字段,就不会丢失一个字段。

对于结构:

let eg = Example{
  a: Some("test".to_string),
  b: Some(123),
  c: None,
}
Run Code Online (Sandbox Code Playgroud)

我想要输出格式:

a: test
b: 123
c: -
Run Code Online (Sandbox Code Playgroud)

我目前正在使用,#[derive(Debug)]但我不喜欢它打印出来Some(X)以及None其他一些东西。

如果我知道结构中的所有值都是Option<T: fmt::Display>我可以生成自己的Display方法而不必再次列出字段?

rust

1
推荐指数
2
解决办法
85
查看次数

标签 统计

rust ×3

introspection ×1

reflection ×1