3

Objective-CはANSICのスーパーセットです。GNUCでは、ある関数を別の関数にネストできます...このように...

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でこれを行うことは可能ですか?

上記のCコードをシミュレートできるブロックとNSInvocationオブジェクトについて知っています。しかし、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

できませんが、ブロックで同じ動作を簡単に得ることができます

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、関数内に常に暗黙的なものがあることを意味します。

別の関数の中にネストされている関数をどのように呼び出すことになっていますか?それをクラスメソッドにすることはあまり意味がありません。それを呼び出す唯一の方法は、それを静的にすることです(しかし、それは本当にそれを複雑にしすぎているようです)

ObjectiveC ++を使用する場合は、OS X上のC、C ++、ObjectiveC、またはファンクターのようなもので使用できるブロックを使用する必要があります。

于 2012-11-25T01:03:26.923 に答える