На самом деле я опубликовал это на форумах Unity, но ни на один из моих вопросов, связанных с языком, там не ответили. Итак, скажем, у меня есть функция, определенная так в Unity Script:
function GetSomething : SomeClass
{
return new SomeClass();
}
Где SomeClass — это некоторый класс, определенный в другом месте. Теперь у меня есть переменная theFunction типа Function, и я хочу убедиться, что она что-то возвращает. Итак, что я делаю, это следующее:
// 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 ИЛИ просто переопределить определение функции, чтобы вернуть объект следующим образом:
function GetSomething : Object
{
return new SomeClass();
}
Это очень раздражает, потому что легко забыть сделать :Object (тем более, что если вы его пропустите, он будет правильно считать, что он имеет возвращаемый тип SomeClass), и результатом является не ошибка, а очень тонкая ошибка, поскольку литье не удается. Есть ли способ получить поведение, которое я хочу, то есть правильное понижение до function() : Object, так же, как я могу понижать нормальные объекты?