3

Objective-C 是 ANSI C 的超集。在 GNU C 中,您可以将一个函数嵌套在另一个函数中......就像这样......

float E(float x)
{
    float F(float y) //objective-C compiler says expected ; at end of declaration
    {
        return x + y;
    }
    return F(3) + F(4);
}

在Objective-C中可以做到这一点吗?

我知道块和 NSInvocation 对象,它们可以模拟上面的 C 代码。但是你能在 Objective-C 中另一个函数的词法范围内定义一个函数吗?就像是 ...

-(int) outer:(int)x
{
    -(int) inner:(int)y //use of undeclared identifier inner
    {
        return x * 3;
    }
    return inner(x);
}
4

2 回答 2

6

你不能,但你可以很容易地用 block 获得相同的行为

int outer(int i)
{
    int (^inner)(int) = ^(int x)
    {
        return x * 3;
    };

    return inner(i);
}
于 2012-11-25T01:02:09.783 回答
2

您不能仅仅因为在 ObjectiveC 中方法像在 C++ 中那样附加到类,这意味着self函数内部总是存在隐含的。

您应该如何调用嵌套在另一个函数中的函数?将其作为类方法没有多大意义。调用它的唯一方法是让它成为静态的(但它似乎真的过于复杂了)

您应该使用 OS X 上的 C、C++ 和 ObjectiveC 可用的块,或者如果您要使用 ObjectiveC++,则应该使用类似函子之类的东西。

于 2012-11-25T01:03:26.923 回答