2016-06-12 40 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

相关问题