We saw in this chapter that the code in Julia is represented by expressions that are data structures of type Expr
. The structure of a program and its types can therefore be explored programmatically just like any other data. This means that a running program can dynamically discover its own properties, which is called reflection. We already have encountered many of these functions before:
typeof
andsubtypes
to query the typehierarchy
(refer to Chapter 6, More on Types, Methods, and Modules)methods(f)
to see all the methods of a functionf
(refer to Chapter 3, Functions)names
andtypes
: given a typePerson
:type Person name:: String height::Float64 end
Then,
names(Person)
returns the field names as symbols:2-element Array{Symbol,1}: :name :height
.Person.types
returns a tuple with the field types(String, Float64)
.To inspect how a function is represented internally, you can use
code_lowered
:code_lowered(+, (Int, Int))
This returns the following output...