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 将为空。为了不为空,我必须更具体并强制转换为 function() : SomeClass 或者只是覆盖函数定义以返回一个 Object ,如下所示:

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 回答