erg/doc/zh_TW/faq_technical.md
Cai Bingjun 557f03ffc9 WIP
2022-10-15 12:18:04 +08:00

2.9 KiB
Raw Blame History

技術常見問題

badge

本節回答有關使用 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 函數 NoneNoneType 的一個實例。它通常與 Option 類型一起使用 () 是一個單元類型和它自己的一個實例。當您想要返回"無意義的值"(例如過程的返回值)時使用它

為什么 x = p!() 有效但 f() = p!() 會導致 EffectError?

! 不是副作用產品的標記,而是可能導致副作用的對象 過程 p! 和可變類型 T! 會引起副作用,但如果 p!() 的返回值是 Int 類型,它本身就不再引起副作用

當我嘗試使用 Python API 時,對于在 Python 中有效的代碼,我在 Erg 中收到類型錯誤。這是什么意思?

A: Erg API 的類型盡可能接近 Python API 規范,但有些情況無法完全表達 此外,根據規范有效但被認為不合需要的輸入(例如,在應該輸入 int 時輸入浮點數)可能會被 Erg 開發團隊酌情視為類型錯誤。