我沒有在ML中做過任何編程,但我正在學習函數式編程。毫無疑問,ML的類型通常很特別,但我想知道是否可以進行類型轉換來解決嚴格的類型限制?如果你不能,那是因爲ML想要減少不正確類型的機會,還是它沒有被實現?你可以在ML中進行類型轉換嗎?
回答
「類型鑄造」可能意味着很多不同的東西。至少有3種完全不同的用例:
在特定不同類型(例如數字類型)之間轉換。 ML可以通過各自的功能實現,它們只是不會僞裝成「casts」
從頂部類型(如
Object
或void*
)往返鑄造。這只是一種破解壓制類型系統的方法。幸運的是,ML具有適當的參數多態性和代數數據類型,所以通常不需要這樣做。做了令人討厭的低級別詭計,徹底顛覆了類型系統。 ML通常不支持它,因爲它被設計成一種安全的高級語言。
什麼形式的鑄造你特別感興趣,爲什麼?
感謝您的回答。我在談論第一個要點。我從來沒有真正想到第二個子彈類型鑄造。我很感興趣,因爲我看到你可以在ML中有[1,2,3]這樣的東西,但是你不可能有[1,[1,2],3](對不起,如果語法關閉),因爲所有第二個列表的元素不是相同的類型。所以,我想了一個像[1,2.0,3]這樣的例子。從技術上講,這是行不通的,但演員可以輕鬆解決這個問題。 – JustBlossom
@ LearnLanguages96您的示例與ML無法區分;都失敗了,因爲列表中的第二個項目與第一個示例中的第一個項目具有不同的類型,它是一個「int list」,在第二個項目中它是「真實」的,但是重要的是它們不匹配。 SML太漂亮了,不能在標準中允許這樣的事情,但是有特定於實現的轉換,例如[在SML/NJ中的Unsafe結構中](http://www.smlnj.org/doc/SMLofNJ/pages/ unsafe.html)或[MLton中的MLtonStructure](http://mlton.org/MLtonStructure)。 –
@ LearnLanguages96,你的例子是關於第二點。這就是通常使用代數數據類型的原因。我假設你的例子應該描述一棵樹,所以你可以定義'datatype'樹'L' B'列表'並寫入'B [L 1,B [L 1,L 2],L 3]'。或者如果你真的想要一個異構列表,那麼你也可以使用數據類型:'datatype item = N of int | S的字符串| b bool val xs = [N 5,B true,S「boo」,N 6]'。幸運的是,後一種情況在實踐中很少需要。 –
- 1. 你可以在PHP中強制類型轉換嗎?
- 2. 我們可以使用工會進行類型轉換嗎?
- 3. 在Swift中可以爲你的類類型創建隱式轉換嗎?
- 4. 你如何在紅寶石陣列中進行類型轉換?
- 5. Flask-SQLAlchemy-你可以在模型中進行查詢嗎?
- 6. 你可以在已經轉換的PDF中插入空行嗎?
- 7. 你可以將其轉換爲VB嗎?
- 8. 你可以將Model轉換爲ModelAndView嗎?
- 9. 在SML中進行類型轉換
- 10. 在MIPS中進行類型轉換
- 11. 在C++中進行類型轉換
- 12. 在Matlab中進行類型轉換
- 13. 在Groovy中進行類型轉換
- 14. 在C中進行類型轉換#
- 15. 是否可以在純JPA中進行類型轉換(從布爾型到yes_no)?
- 16. 你可以在GridView中縮進嗎?
- 17. 可以將`Either`類型轉換爲`Task`類型嗎?
- 18. 可以在狀態機中進行狀態轉換嗎?
- 19. 我可以直接在html頁面中進行XSLT轉換嗎?
- 20. 我可以在iOS中使用CIImageAccumulator進行滑動轉換嗎?
- 21. 如何將ML VectorUDT功能從.mllib轉換爲.ml類型
- 22. 是否可以對std :: min()進行類型轉換?
- 23. 是否可以對一個const變量進行類型轉換?
- 24. 你可以在Access中進行行鎖定嗎?
- 25. 你可以在PHP中嵌套類嗎?
- 26. 可以在Switch語句中進行類型聲明嗎?
- 27. 你可以在int變量中存儲/轉換int值嗎?
- 28. 可以在換行符後縮進嗎?
- 29. 使用泛型進行類型轉換
- 30. 你可以在Linux中運行Xcode嗎?
有關ML的一切都是故意的。 :) –