我想了解這兩個編程概念之間的區別。第一個代表沒有數據類型,後者代表類型存在,但沒有信息。此外,我認識到單元來自函數式編程理論基礎,但我仍然不明白單元基元的可用性(例如,在F#程序中)。無效與單元
無效與單元
回答
單位類型只是使一切更規則。在某種程度上,您可以將F#中的每個函數都考慮爲獲取單個參數並返回單個結果。不需要任何參數的函數實際上將「unit」作爲參數,並且不返回任何結果的函數返回「unit」作爲結果。這具有多種優點;例如,考慮在C#中,您需要一組「Func」委託來表示各種返回值的元素的函數,以及一些不返回值的「操作」委託(因爲例如Func<int,void>
不合法 - void不能以這種方式使用,因爲它不是真正的類型)。
在函數式編程中,我們通常會將輸入映射到輸出。這實際上意味着將參數映射到其返回值。但是如果在數學/範疇理論意義上某種東西是功能的話,它必須返回。 A void
值表示函數不返回任何內容,這在這些術語中是無意義的。
unit
是void
的功能答案。它基本上只有一個值,()
。它有很多用途,但這裏有一個簡單的用法。比方說,你在一個更傳統的命令式語言有這樣的事情:
public static <T, U> List<U> map(List<T> in, Function<T, U> func) {
List<U> out = new ArrayList<U>(in.size());
for (T t : in) {
out.add(func.apply(t));
}
return out;
}
這適用於特定的功能func
到名單上的每一個元素,生產func
的輸出類型的新名單。 但是如果你傳遞一個只打印它的參數的函數會發生什麼?它不會有輸出類型,那麼您可以爲U
投入什麼?
在某些語言中,傳遞這樣的函數會破壞此代碼(就像在C#中一樣,您不能將void
指定爲泛型類型)。你不得不採取像Action<T>
這樣的解決方法,它會變得笨重。
這是的unit
概念是很有用的:它是一個類型,而是一個可能只需要在一個單一的值。這大大簡化了鏈接和組合等事情,大大減少了您不必擔心的特殊情況。
也對此答案+1。你的片段非常徹底。謝謝! – 2009-12-14 14:11:51
- 1. 單元格的值無效
- 2. 與ReactJS無效的dropzone元素
- 3. 無效方法的Java單元測試
- 4. MVC Moq單元測試無效方法
- 5. 無效的單元格座標phpExcel
- 6. 如何單元測試無效方法
- 7. 無效的單元格座標phpExcel
- 8. 無效XMlRoot元
- 9. 表單無效與有序的組合
- 10. XML:isnil無效元素
- 11. 無法合併VBA 2007工作表中的單元格無效
- 12. array.find與Babel無效
- 13. popToRootViewControllerAnimated與tabbar無效
- 14. JavaScript與c#無效
- 15. 的va_arg與無效*
- 16. 與無效字符
- 17. 值無效:與org.sonarsource.scanner.maven
- 18. Django表單無效
- 19. Django表單無效
- 20. Angular2 - 表單無效
- 21. 單行$無效MongoDB
- 22. iOS:viewForHeaderInSection無法與單元格對齊?
- 23. 與UICollectionView單元格選擇相關的問題使其佈局無效時
- 24. 碼頭拉不合格。清單無效:清單無效 - artifactory
- 25. React.js - 元素類型無效
- 26. 塊無效元素XSD?
- 27. Javascript DOM元素無效CSS
- 28. 音頻元素無效
- 29. 無效的Json基元
- 30. XML .XSD無效元素
嗯解釋+1 – Dario 2009-12-14 13:50:54
And()只是n元組元組的邏輯結尾,0元元組! – Dario 2009-12-14 13:55:50
謝謝!標記。 – 2009-12-14 14:12:52