erg/doc/EN/syntax/24_module.md
Cai Bingjun b07c17708b WIP
2022-10-15 12:14:52 +08:00

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

Previous | Next