2013-03-07 69 views
0

我无法编写嵌套块。说我想要一个块和整数。该块将返回一个采用另一个整数的块,并返回两个整数的和。我没有运气写这个。这里有一个尝试,它并不比任何其他矿井的更糟糕:Objective-C:具有块返回类型的块的类型签名

(int ^(int)) (^bblock)(int) = ^(int a) { 
    return ^(int b){ return a + b; }; 
}; 

任何人能发现有什么不对?

+1

'typedef'是你的朋友。 – 2013-03-07 21:52:03

+1

@CarlNorum或Haskell。 :P – 2013-03-07 22:00:56

+1

http://cdecl.ridiculousfish.com/?q=declare+foo+as+block+%28int%29+returning+block+%28int%29+returning+int – 2013-03-07 22:01:57

回答

2

相当难看,但你可以使用括号,而不是类型定义的做到这一点:

int (^(^functor)(int))(int) = ^(int a) { 
    return Block_copy(^(int b) { 
     return a + b; 
    }); 
}; 
+0

我认为你的意思是'(int)',而不是'(int,int)' – 2013-03-07 22:01:20

+0

@KevinBallard不,这是编译器错误。尝试一下。 – 2013-03-07 22:02:02

+0

再次阅读您的街区。内部块应该只用'b',它应该从外部块中捕获'a'。 – 2013-03-07 22:02:29