私は実際にこれを 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 に適切にダウンキャストするという、私が望む動作を取得する方法はありますか?