hack常見問題

2018-09-28 19:51 更新

常問問題

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

異步

異步與多線程相同?

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

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

您最好能夠重新閱讀Async介紹以進(jìn)一步澄清。

我應(yīng)該實(shí)行自己的Awaitable課嗎?

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

但是,您應(yīng)該Awaitable在寫作async時(shí)自由使用,讓運(yùn)行時(shí)處理如何處理等待。

集合

我應(yīng)該用new直接實(shí)例化一個(gè)集合嗎?

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

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

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

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

XHP

我收到Fatal error: Class undefined錯(cuò)誤?

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

其他

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

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

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

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)