int (^Multiply)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};
int result = Multiply(7, 4); // result is 28
它只是看起來很複雜 - 同樣的事情可以用一個函數來完成,或者不是?這個例子中真正的意義在哪裏?
int (^Multiply)(int, int) = ^(int num1, int num2) {
return num1 * num2;
};
int result = Multiply(7, 4); // result is 28
它只是看起來很複雜 - 同樣的事情可以用一個函數來完成,或者不是?這個例子中真正的意義在哪裏?
塊的能力就像詞法關閉(也被稱爲Python或C#等語言中的lambda)。因此,你可以做
// within other code
int myVar;
int (^multiplyClosure)(int) = ^(int num1) {
return num1 * myVar;
};
然後,您可以通過這個塊周圍,它會保持一個myVar
(複印件)。因此,關閉實際上是代碼和上下文,其中存在權力。
這個例子的意義在於告訴你,塊是如何創建的以及它們可以做什麼。它就像你會在幾乎所有書中找到的「hello world」例子,但不是真正的應用程序。它只是爲了說明一個概念。
在這個特殊的例子中,即使是一個函數也是不合適的,因爲它是基本的算術。但是,該示例用於向您顯示塊的語法和調用約定。
塊本身作爲回調或「拖放代碼」更有用。它們是一種不需要構建有狀態函數或委託類的委託和代碼擴展方法,也不需要爲每個回調提供無處不在的參數。
塊中沒有同步問題。考慮到你在多線程中做的事情,「Multiply」的兩個參數被其他線程共享。它們不會被其他線程修改,因爲它們處於「閉包」狀態,所以你不需要鎖定某些東西,它會保持代碼簡單。