2.9 KiB
技術常見問題
本節回答有關使用 Erg 語言的技術問題。換句話說,它包含以 What 或 Which 開頭的問題,以及可以用 Yes/No 回答的問題
有關如何確定語法的更多信息,請參閱 此處 了解基礎語法決策,以及 此處
Erg 中有異常機制嗎?
答: 不會。Erg 使用 Result
類型代替。請參閱 此處 了解 Erg 沒有異常機制的原因
Erg 是否有與 TypeScript 的 Any
等價的類型?
答: 不,沒有。所有對象都至少屬于 Object
類,但是這種類型只提供了一組最小的屬性,所以你不能像使用 Any 那樣對它做任何你想做的事情
Object
類通過match
等動態檢查轉換為所需的類型。它與Java 和其他語言中的Object
是同一種
在 Erg 世界中,沒有像 TypeScript 那樣的混亂和絕望,其中 API 定義是"Any"
Never、{}、None、()、NotImplemented 和 Ellipsis 有什么區別?
A: Never
是一種"不可能"的類型。產生運行時錯誤的子例程將"Never"(或"Never"的合并類型)作為其返回類型。該程序將在檢測到這一點后立即停止。盡管 Never
類型在定義上也是所有類型的子類,但 Never
類型的對象永遠不會出現在 Erg 代碼中,也永遠不會被創建。{}
等價于 Never
Ellipsis
是一個表示省略號的對象,來自 Python
NotImplemented
也來自 Python。它被用作未實現的標記,但 Erg 更喜歡產生錯誤的 todo
函數
None
是 NoneType
的一個實例。它通常與 Option
類型一起使用
()
是一個單元類型和它自己的一個實例。當您想要返回"無意義的值"(例如過程的返回值)時使用它
為什么 x = p!()
有效但 f() = p!()
會導致 EffectError?
!
不是副作用產品的標記,而是可能導致副作用的對象
過程 p!
和可變類型 T!
會引起副作用,但如果 p!()
的返回值是 Int
類型,它本身就不再引起副作用
當我嘗試使用 Python API 時,對于在 Python 中有效的代碼,我在 Erg 中收到類型錯誤。這是什么意思?
A: Erg API 的類型盡可能接近 Python API 規范,但有些情況無法完全表達 此外,根據規范有效但被認為不合需要的輸入(例如,在應該輸入 int 時輸入浮點數)可能會被 Erg 開發團隊酌情視為類型錯誤。