hack常見問題

2018-09-28 19:51 更新

常問問題

這將包含一些有用的提示和常見問題re:Hack。這是一個living文件,將來可能會被塑造成更多的用戶互動。

異步

異步與多線程相同?

不,這很重要。多線程允許任務在不同的執(zhí)行線程中執(zhí)行。Hack(和PHP)代碼只能在一個執(zhí)行線程中運行。Async通過允許通過某種過程(I / O,數(shù)據(jù)獲取,網(wǎng)絡(luò))停滯的任務來將控制權(quán)放在其他任務上以最小化滯后,從而利用該線程來獲得更好的容量。

通常,當使用異步時,您將收集一批I / O任務,結(jié)果會比依次執(zhí)行的結(jié)果快一些。

您最好能夠重新閱讀Async介紹以進一步澄清。

我應該實行自己的Awaitable課嗎?

不, Awaitable不是用戶實現(xiàn)的。實現(xiàn)自己的Awaitable類只能由使用HHVM運行時本身和那些編寫本機擴展HHVM。

但是,您應該Awaitable在寫作async時自由使用,讓運行時處理如何處理等待。

集合

我應該用new直接實例化一個集合嗎?

看情況,但通常不是。你應該使用文字語法。但是你可以使用new只有當您傳遞構(gòu)造函數(shù) Traversable或null。

為什么Set::values()返回一個Vector<Tv>,但Set::keys()返回Vector<mixed>?

這是因為ConstSet(Set最終衍生出來的)實現(xiàn)的KeyedIterable<mixed, T>。KeyedIterable::map()指定它返回一個KeyedIterable<Tk, Tm>,意味著鍵和值的不同類型。但是Set不能有不同類型的鍵和值(技術(shù)上說Set沒有鍵,即使它在封面下)。既然KeyedIterable<Tk, Tm>不兼容ConstSet<Tm>,你必須使關(guān)鍵方面Set盡可能的廣泛。

將來可能會修改我們的集合界面或者類型檢查器的進度。

XHP

我收到Fatal error: Class undefined錯誤?

確保您的XHP代碼不在命名空間中。在許多情況下,我們有問題,在屬于命名空間的代碼中使用XHP。這個問題是已知的,我們正在努力找出一個解決方案。

其他

我正在Invalid argument傳遞一個名為函數(shù)的可調(diào)用函數(shù)?

你可能傳遞它作為一個字符串,像這樣:

array_map('my-named-function',.....);

Hack類型檢查器本身就無法理解僅使用其字符串名稱引用的函數(shù)的功能。它需要一些幫助。

在這種情況下,您想通過使用來幫助類型檢查器 fun() 這告訴類型檢查器來查找與該名稱相關(guān)聯(lián)的實際功能并對其進行類型檢查。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號