Elixir 反射

3 投票
1 回答
872 浏览
提问于 2025-04-15 11:15

我定义了一些实体,它们运行得很好,主要是为了元编程的问题。现在我需要反映模型中定义的字段属性。

举个例子:

class Foo(Entity):
      bar = OneToMany('Bar')
      baz = ManyToMany('Baz')

比如说,关系的类型是什么?是“多对多”、“一对多”,还是简单的“字段”,还有关系的目标是什么?

有没有什么简单的方法可以反映Elixir实体呢?

1 个回答

4

在Elixir中,你可以像在Python中那样进行自省,也就是查看对象的属性。比如,你可以用 dir(Foo) 来获取 class Foo 的所有属性名称;如果你想根据属性名提取某个属性,可以用 getattr(Foo, thename);想检查某个属性的类型,可以用 type(theattr) 或者 isinstance 等等。你传给任何 Relationship 子类(比如 OneToManyManyToMany)构造函数的字符串 'Bar',最终会成为这个关系子类实例 r 的 r.of_kind 属性。

在Python标准库中,inspect 模块可能是一个更友好的自省方式,但在很多情况下,使用 dirgetattrisinstance 等也是完全可以的。

撰写回答