reflect.Type
A runtime value describing a BAML type.
Signature
class reflect.TypeA runtime value describing a BAML type.
reflect.Type.of<T>() describes a type argument and
reflect.Type.of_value(value) describes a value's concrete runtime type.
A type value's identity is its declarations': two values naming the same
declarations compare equal, and a runtime-created declaration is equal only
to itself. Reflection methods are exposed directly.
Source:<builtin>/reflect/type.bamlbytes 396–6504
Static methods
of
<T>() -> reflect.Type throws neverReturn the runtime type value for the type argument T.
Concrete arguments are materialized by one LoadType instruction.
of_value
(value: unknown) -> reflect.Type throws neverReturn the concrete runtime type of value, never a literal type.
Values with no reconstructable BAML type produce the unknown type.
Instance methods
_implements
(self, other: reflect.Type) -> bool throws never(internal) Internal native backing implements and implemented_by;
both sides are type values.
_to_string_impl
(self) -> string throws never(internal) The rendering behind baml.ToString for every type value.
reflect.Type and each kind view implement baml.ToString by
out-of-body implement blocks beside the interface
(baml/conversions.baml): baml depends on reflect, never the reverse.
Code inside reflect cannot see those implementations, so it calls this
method directly.
(internal) Internal shared-render-boundary guard for BEP-066 R-1 and R-3.
Construct an array type whose element is this type.
The array view of this type, or null when it does not describe
an array.
The class view of this type, or null when it does not describe
a class.
The enum view of this type, or null when it does not describe
an enum.
The function view of this type, or null when it does not describe
a function.
The interface view of this type, or null when it does not describe
an interface.
The literal view of this type, or null when it does not describe
a literal.
The map view of this type, or null when it does not describe
a map.
The primitive view of this type, or null when it does not describe
a primitive.
The union view of this type, or null when it does not describe
a union.
Reverse of [implements]: iface.implemented_by(t) is the same as
t.implements(iface), with the same associated-type rule. Useful when
the call site naturally reads "does this interface include that type?".
True iff the receiver type nominally implements the interface other
(BEP-044): an implements other { ... } block in the receiver's body,
or an implement other for ... block anywhere in the program, applies
to it with its bounds satisfied. The receiver can be any concrete type:
a class, an enum, a primitive, a list, a map, ...
other is an interface type, so it names every associated type the
interface declares without a default, and an omitted one takes its
default: baml.iter.Iterator<Item = int> is
baml.iter.Iterator<Item = int, Error = never>. Only an
implementation with exactly those associated types matches, so an int
iterator that throws does not implement Iterator<Item = int>, and
there is no way to ask "is this any iterator".
Returns false when other is not an interface, or when the receiver
is not a concrete type (an interface does not implement itself).
Returns the precise kind view of this type value: a freshly
allocated view instance wrapping the receiver in its _ty field.
meta
(Pair this type value with schema metadata without changing its identity.
Construct the canonical union of this type and null.
Render deterministic canonical BAML source for this definition. Non-equivalent declarations with the same display name are rejected.
Implementations
reflect.AnyClass for T
Instance methods
The class declaration's schema metadata, or empty metadata when the runtime type is not a class.
Read the field called name as T, or null if this value's class
declares no such field. A present field holding null also reads as
null; use has_field or get<T?> to tell the two apart.
Throws
reflect.errors.TypeMismatchif the field's value is not aT.
A value-bound handle to the field called name, or null if this
value's class declares no such field.
get
<T>(self, name: string) -> T throws reflect.errors.NotFound | reflect.errors.TypeMismatchRead the field called name as T. Read a nullable field with a
nullable T (get<int?>). find returns null for a missing field
instead of throwing.
Throws
reflect.errors.NotFoundif this value's class declares no field calledname.reflect.errors.TypeMismatchif the field's value is not aT.
A value-bound handle to the field called name. find_field returns
null instead of throwing.
Throws
reflect.errors.NotFoundif this value's class declares no field calledname.
has_field
(self, name: string) -> bool throws neverWhether this value's runtime class declares a field called name.
false when the runtime type is not a class.
Reflected fields bound to this value for Field.value<T>().
name
(self) -> string throws neverThe rendered name of this value's concrete runtime type.
type
(self) -> reflect.Type throws neverThis value's concrete runtime type.
Source:<builtin>/reflect/reflect.bamlbytes 14431–14461
reflect.TypeView for reflect.Type
Instance methods
Construct an array type whose element is this type.
as_type
(self) -> reflect.Type throws neverReverse of implements: iface.implemented_by(t) is the same as
t.implements(iface). false when this type is not an interface, or
when other is not a concrete type.
True iff this type nominally implements the interface other. Any
concrete type can: a class, an enum, a primitive, a list, a map, ...
other pins the interface's associated types (an omitted one takes
its default), and only an implementation with exactly those matches:
see reflect.Type.implements. false when other is not an
interface, or when this type is not a concrete type.
Returns the precise kind view of this type value.
meta
(Pair this type value with schema metadata without changing its identity.
Construct the canonical union of this type and null.
Render deterministic canonical BAML source for this definition. Non-equivalent declarations with the same display name are rejected.
Source:<builtin>/reflect/type.bamlbytes 926–1044
Related definitions
reflect.AnyClassreflect.AnyClassreflect.AnyClassreflect.AnyClassreflect.AnyClassreflect.AnyClassreflect.AnyClassreflect.AnyClassreflect.AnyClassreflect.TypeViewreflect.TypeViewreflect.TypeViewreflect.TypeViewreflect.TypeViewreflect.TypeViewreflect.TypeViewreflect.AnyClassreflect.Arrayreflect.Classreflect.class.Fieldreflect.Enumreflect.errors.CompilationErrorreflect.errors.NotFoundreflect.errors.TypeMismatchreflect.Functionreflect.Interfacereflect.Literalreflect.Mapreflect.Metareflect.Primitivereflect.TypeKindreflect.TypeViewreflect.Unionreflect.WithMeta