OxL Справочник OxL
РусскийEnglish

15.2 Рефлексия

oxl
comptime fn toCsvRow<T>(x: &T) -> String {
  var out = String.new()
  inline for f in reflect(T).fields where f.visible {
    out.push("{x.[f]},")
  }
  out
}
  • reflect(T) -> TypeInfo (только comptime): имя, вид (Data, Enum, Union, Prim, Interface, Service, Actor, Topic, Config), поля (name, type, tag, attrs, visibility, default), варианты, методы (name, params, ret, effects, attrs), rpc, атрибуты.
  • x.[f] — доступ к полю по comptime-значению FieldInfo.
  • Рантайм-рефлексия только для типов с @reflect: rt.typeinfo(x), rt.get(x, "field") -> Any | NoField, rt.set(&var x, "field", v), rt.call(&x, "method", args) -> Any | CallError. Типы без @reflect метаданных в бинарнике не имеют.
  • Рефлексия видит только то, что видно в точке вызова по правилам §2.3.

См. также

Исходник: docs/spec/oxl-standard.md