erg/doc/zh_TW/syntax/33_package_system.md
Cai Bingjun a9ea4eca75 trifle
2022-09-11 20:53:52 +08:00

2.7 KiB
Raw Blame History

打包系統

badge

Erg包大致可以分為app包即應用程序以及lib包即庫。 應用包的入口點是src/app.erapp.er 中定義的main 函數被執行。 lib 包的入口點是src/lib.er。導入包相當于導入 lib.er

一個包有一個稱為模塊的子結構,在 Erg 中是一個 Erg 文件或由 Erg 文件組成的目錄。外部 Erg 文件/目錄是作為模塊對象的可操作對象。

為了將目錄識別為模塊,有必要在目錄中放置一個"(目錄名稱).er"文件。 這類似于 Python 的 __init__.py,但與 __init__.py 不同的是,它放在目錄之外。

例如,考慮以下目錄結構。

└─┬ ./src
  ├─ app.er
  ├─ foo.er
  ├─ bar.er
  └─┬ bar
    ├─ baz.er
    └─ qux.er

您可以在 app.er 中導入 foobar 模塊。由于 bar.er 文件,bar 目錄可以被識別為一個模塊。 foo 模塊是由文件組成的模塊,bar 模塊是由目錄組成的模塊。 bar 模塊還包含 bazqux 模塊。 該模塊只是 bar 模塊的一個屬性,可以從 app.er 訪問,如下所示。

# app.er
foo = import "foo"
bar = import "bar"
baz = bar.baz
# or `baz = import "bar/baz"`

main args =
    ...

請注意用于訪問子模塊的 / 分隔符。 這是因為可以有諸如 bar.baz.er 之類的文件名。 不鼓勵使用此類文件名,因為 .er 前綴在 Erg 中是有意義的。 例如,用于測試的模塊。 以 .test.er 結尾的文件是一個(白盒)測試模塊,它在運行測試時執行一個用 @Test 修飾的子例程。

└─┬ ./src
  ├─ app.er
  ├─ foo.er
  └─ foo.test.er
./src

```python
# app.er
foo = import "foo"

main args =
    ...

此外,以 .private.er 結尾的文件是私有模塊,只能由同一目錄中的模塊訪問。

└─┬
  ├─ foo.er
  ├─ bar.er
  └─┬ bar
    ├─ baz.private.er
    └─ qux.er
# foo.er
bar = import "bar"
bar.qux
bar.baz # AttributeError: module 'baz' is private
# qux.er
baz = import "baz"

上一頁 | 下一頁