mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-30 12:51:10 +00:00
1.3 KiB
1.3 KiB
module
Erg allows you to think of the file itself as a single record. This is called a module.
# foo.er
.i = 1
# Defining the foo module is almost the same as defining this record
foo = {.i = 1}
# bar.er
foo = import "foo"
print! foo # <module 'foo'>
assert foo.i == 1
Since module types are also record types, deconstruction assignment is possible.
{sin; cos; ...} = import "math"
module visibility
└─┬ ./src
├─ lib.er
├─ foo.er
├─bar.er
└─┬ bar
├─ baz.er
└─ qux.er
circular dependencies
Erg allows you to define circular dependencies between modules.
# foo.er
bar = import "bar"
print! bar.g 1
.f x = x
# bar.er
foo = import "foo"
print! foo.f 1
.g x = x
However, variables created by procedure calls cannot be defined in circular reference modules. This is because Erg rearranges the order of definitions according to dependencies.
# foo.er
bar = import "bar"
print! bar.x
.x = g!(1) # ModuleError: variables created by procedure calls cannot be defined in circular reference modules
# bar.er
foo = import "foo"
print! foo.x
.x = 0