2013-04-26 77 views
1

我實際上在Unity論壇上發佈了這個函數,但是我的語言相關問題在這裏似乎沒有得到任何答案。所以,讓我們說我有定義爲使在Unity腳本函數:UnityScript中的函數向下轉換

​​

其中SomeClass的是其他地方定義一些類。現在,我有一個函數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將是無效的。它不爲空,我必須更加具體和轉換爲()函數:SomeClass的或只覆蓋函數定義爲返回一個對象像這樣:

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

這是很煩人的,因爲它很容易忘記要做到:對象(特別是如果你把它拋出去,它會正確地推斷它是返回類型SomeClass),結果不是錯誤,而是一個非常微妙的錯誤,因爲轉換失敗。有沒有什麼辦法讓我想要的行爲,這是正確地downcast到函數():對象,我可以倒下普通對象的相同方式嗎?

+0

erm ..你爲什麼不直接調用函數的名字?擁有自己的對象有什麼意義? – noob 2013-04-27 00:02:00

+0

我的程序並沒有從字面上進行上述操作,這是一個可以召回回調的類。回調的類型是Function,並且API的用戶可以選擇提供一個回調函數,該函數返回一個值(並且該值被使用),或者返回void。我使用類型轉換來檢查我處於哪種情況。 – 2013-04-27 00:29:15

+0

所以我同意,爲什麼要創建對象?爲什麼不只是設置並獲得一個數據? – crychair 2014-03-25 20:30:00

回答

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>(); 
}