是否可以创建一个适用于块范围的函数?如
编辑澄清
enum { cannot, must };
int it(enum modal verb);
describe(fx) {
context("some context") {
it(must) { /* Some test that returns an int to it() */ };
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑这是可能的,那么我能做的下一个最好的事情是什么?
这对我来说看起来几乎像Smalltalk或Ruby,这让我觉得你想要将闭包(有时称为块)传递给函数.这可以通过C的各种扩展来实现,也有解决方法.
例如,您可能希望迭代列表:
{
// this does not actually work, sorry
iterate(list) { |i| -> printf("%d\n", i); }
}
Run Code Online (Sandbox Code Playgroud)
如果您使用Apple的C扩展,您可以使用称为"块"的东西
{
// Apple only
iterate(list, ^(int i) { printf("%d\n", i); });
}
Run Code Online (Sandbox Code Playgroud)
你也可以写一个回调,
static void my_callback(int i) { printf("%d\n", i); }
...
{
iterate(list, my_callback);
}
Run Code Online (Sandbox Code Playgroud)
回调函数无法访问其他函数中的变量,因此您必须找到一种共享变量的方法.
GCC中有嵌套函数; 这些可以像Apple的"块"扩展一样访问范围变量.
{
// GCC only
void callback(int i) { printf "%d\n", i); }
iterate(list, callback);
}
Run Code Online (Sandbox Code Playgroud)
如果你发现自己想要做很多事情,你可以通过切换到C以外的语言来省去很多头痛.对于高阶编程来说,C语言不是很友好.