gpt4 book ai didi

objective-c - 如何实现递归 block ?

转载 作者:太空狗 更新时间:2023-10-30 03:31:20 26 4
gpt4 key购买 nike

我想声明一个 block 类型,它接受一个相同 block 类型的参数。就是这样:

typedef void (^BlockInBlock) (BlockInBlock block);

我知道声明无效。但我想知道是否有任何可能的方法来实现只接受一个相同 block 类型的参数的递归 block 。


我正在尝试寻找一种使用 block 在 Objective-C 中实现面向方面编程 (AOP) 的方法。以下是我关于如何实现的问题。

进一步的问题 1:

如何实现 variadic function它需要我上面描述的许多 block 并以 nil 结束,我可以用许多 block 调用该函数直到遇到 nil?它会是这样的:

@interface NSObject(AOP)
- (void) invokeBlockInBlock:(BlockInBlock) headBlock, ...{
va_list blockList;
va_start(blockList, headBlock);

// Invoke recursive blocks here until the value of va_arg(blockList, BlockInBlock) is nil
// it would be like: block1(self, block2(self, block3(self, block4(...))));

va_end(blockList);
}
@end

进一步的问题 2:

如果递归 block 有返回值怎么办?


关于C语言的补充问题:

是否可以声明一个 C 函数,它采用一个 C 函数指针作为参数,并且该 C 函数指针的函数也采用另一个 C 函数指针?

最佳答案

可能与您正在寻找的相似:

typedef void (^Block)(id);

从字面上看,它会导致无限递归循环:

Block _block;
_block = ^(Block block) {
if (block) block(block);
};

_block(_block);

然而,参数可以是任何 id,不仅是完全相同的 Block,而且它表示您如何将相同的 block 作为参数传递给相同的 block 。

所以,这会是的想法。

关于objective-c - 如何实现递归 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com