1

私は実際にこれを Unity フォーラムに投稿しましたが、私の言語関連の質問のどれもそこで答えられていないようです。では、Unity Script で次のように定義された関数があるとします。

function GetSomething : SomeClass
{
   return new SomeClass();
}

SomeClass は、別の場所で定義されたクラスです。ここで、Function 型の変数 theFunction があり、それが何かを返すことを確認したいと考えています。だから私がすることは次のとおりです:

// theFunction is set to GetSomething somewhere else in the program.
var functionThatReturnsSomething = theFunction as function() : Object;

if (functionThatReturnsSomething != null)
//... call it and do stuff with the returned value.

残念ながら、上記のコードでは functionThatReturnsSomething が null になります。null にならないようにするには、より具体的にして function() にキャストする必要があります。 SomeClass または、関数定義をオーバーライドしてオブジェクトを返すだけです。

function GetSomething : Object
{
   return new SomeClass();
}

:Object を実行するのを忘れやすいため (特に、これを省略すると、戻り値の型 SomeClass であると正しく推論されるため)、これは非常に厄介であり、結果はエラーではなく、非常に微妙なバグです。キャストは失敗します。通常のオブジェクトをダウンキャストできるのと同じように、 function() : Object に適切にダウンキャストするという、私が望む動作を取得する方法はありますか?

4

1 に答える 1

0

私が考えることができる唯一のことは、関数を宣言するときに関数名の後の括弧を忘れたことです。すべてを次のスクリプトに入れ、オブジェクトにアタッチして実行すると、問題なく関数にアクセスできます。

#pragma strict

import System.Collections.Generic;

function Start ()
{
    // theFunction is set to GetSomething somewhere else in the program.
    var functionThatReturnsSomething = GetSomething as function() : Object;

    if (functionThatReturnsSomething != null)
    {
        //... call it and do stuff with the returned value.
        Debug.Log(functionThatReturnsSomething);
    }
    else Debug.Log("null");
}

function GetSomething() : List.<int>
{
    return new List.<int>();
}
于 2014-11-11T14:37:33.263 に答える