第十四章 相容性和高階互操作
在這一章,我們將學習f# 與其他語言進行互操作所需的內容,不僅包括在.net 框架內,而且也包括從f# 中使用非託管**,以及從非託管**中使用 f#。
警告在本書中,我盡一切努力保證使你只需要了解 f#;然而,在這一章,雖然我一直保持**對這些語言中的最低需求,但是,如果你知道一點 c#、 c++ 或 .net common il 的內容,對你是有幫助的。
c# 呼叫 f# 庫
在 f# 中可以建立兩種型別的庫:一種是只在 f# 中使用的庫,另一種是可以在任何.net 語言中使用的庫。這是因為 f# 可以用豐富、功能強大的方式利用 . net 型別系統,因此,有些型別對其他.net 語言看起來可能有點獨特;然而,當從 f# 中來看時,這些型別總是會看起來像他們應該的那樣。
因此,雖然可以從任何.net 語言中使用 f# 中的任何庫,但是,如果想使庫盡可能的友好,就需要遵守一定的規則。下面就是我總結的一些規則:
• 始終使用符號 .fsi 檔案,或者 private和 internal 來隱藏實現的細節,歸檔客戶端需要的應用程式設計介面;
• 避免公開返回元組的函式;
• 如果要將公開乙個函式,它接收的引數值是另乙個函式,那麼,公開值作為委託;
• 不要在應用程式設計介面中使用聯合型別,但是,如果你確實必須使用這些型別,那麼,就新增成員,使它們更容易使用;
• 避免返回 f# 列表,相反,應該使用 system.collections.objectmodel命名空間下的陣列、system.collections.generic.ienumerable,或者更好的是使用集合 和 readonlycollection;
• 如果可能,把型別定義放在命名空間下,在模組中只放值定義;
• 小心在類和介面中定義的簽名,乙個小的語法改動,會引起很大的差別。
在以下幾節中我將用示例來說明這些。
第十四章 高階I O
對於乙個給定的描述符,有兩種為其指定非阻塞i o的方法。1.如果呼叫open 函式獲得描述符,可以使用o nonblock標誌。如int fd open a.txt o rdwr o noneblock 2.對於已經開啟的描述符,可以使用fcntl 函式設定o nonblock標誌。在此使用之前的例...
第十四章 迭代和推導
我們以及知道for迴圈可以用於python中任何序列型別,包括列表 元組以及字串,如下所示 for i in 1 2,3 4 print i 1234 for i in 1 2,3 4 print i 1234 for i in spam print i spam實際上for迴圈可用於任何可迭代物件...
第十四章 模組和包
函式與模組的關係 乙個模組中可以有多個函式 在python中乙個擴充套件名為.py的檔案就是乙個模組 使用模組的好處 方便其他程式和指令碼的匯入並使用 避免函式名和變數名衝突 提高 的可維護性 提高 的可重用性 模組的匯入 安裝第三方模組 pip install 模組名 使用import匯入模組 使...