是否可以在Objective-C中的另一个函数中嵌套函数

时间:2012-11-25 01:00:30

标签: objective-c c

Objective-C是ANSI C的超集。在GNU C中,you can nest one function in another function ......就像这样......

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);
}

2 个答案:

答案 0 :(得分:4)

您不能,但您可以轻松地使用块

获得相同的行为
int outer(int i)
{
    int (^inner)(int) = ^(int x)
    {
        return x * 3;
    };

    return inner(i);
}

答案 1 :(得分:2)

你不能简单地因为在ObjectiveC方法中附加了类似于C ++的类,这意味着函数内部总是存在隐式self

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

如果你要使用ObjectiveC ++,你应该使用OS X上的C,C ++和ObjectiveC可用的块或像functor类似的东西。