2016-06-12 76 views
2

有什麼辦法可以運行一個函數並獲取返回值作爲函數的參數嗎?讓我解釋一下:我的代碼中有大量的函數,它們只是在發生某些事情之前等待一定的時間。由於我只在一種情況下使用它們,因此我想將它們放入我的方法中,以某種方式使用它們。 (我正在使用Unity3D。)示例:是否可以在一個方法內部運行一個函數?

public void SayHiAfterSeconds(float seconds) { 
    StartCoroutine(sayHiAfterSeconds(seconds)); 
} 
IEnumerator sayHiCoroutine(float seconds) { 
    yield return new WaitForSeconds(seconds); 
    print("Hi."); 
} 

我想將sayHiCoroutine函數放入SayHiAfterSeconds中。例如:

public void SayHiAfterSeconds(float seconds) { 
    StartCoroutine(IEnumerator() { 
     yield return new WaitForSeconds(seconds); 
     print("Hi."); 
    }); 
} 

這可能嗎? 謝謝。

+0

@Valentin只是爲了記錄,這不是重複的。這是**協程** – Fattie

+0

Hi @ 283。你說的很對,你偶然發現了關於Unity的一件有趣的事情。你經常會看到的功能,除了啓動協程外,其他都不例外。 **在許多團隊中,你這樣做很常見:**主叫叫** SayHiAfter **。匹配協程**與下劃線和小寫字母相同,因此,**「_ sayHiAfter」**。我幾乎要對你說「你應該」這樣做,**這是Unity工程師常用的習慣用法。 – Fattie

+0

非常清楚地注意到:**通常情況下,你從來沒有永遠永遠,曾經使用下劃線開始名稱 - 這是一個真正令人難以置信的過時,愚蠢,糟糕的想法,從過去的事情不同。所以通常情況下,永遠不要使用Unity中的「下劃線開始名稱」概念 - 永遠不會。但這是一個非常特殊的情況。我可以說的是,我覺得在這種情況下它是恰當的(它表示「本地」「偶然」「相關」非常好),並且這是非常普遍的。所以,我建議你這樣做。 – Fattie

回答

1

簡答:

您不能將couroutine函數放在另一個函數中,但可以從另一個函數中調用它。這已被要求before

+0

好的,謝謝。有沒有什麼好的方法來命名你的協同功能? – 283

+0

@ 283對我而言,我不喜歡直接打電話。我從另一個函數中調用它。例如,你的'sayHiCoroutine'協程函數應該命名爲'SayHiAfterSecondsCRT',那麼你調用它的函數應該是'SayHiAfterSeconds'。這樣''CRT'被用來確定它是一個協程,沒有'CRT'的'SayHiAfterSeconds'會讓我知道這是一個調用函數而不是以'CRT'結尾的函數。除了協程函數結尾處的CRT之外,名稱應該始終是相同的。這樣,對哪個函數調用哪個函數沒有什麼困惑。 – Programmer

+0

謝謝。我覺得我的代碼變得非常混亂,因爲我不知道如何命名我的協同函數! – 283

相關問題