一个值可以存储在作为参数调用的函数返回的变量中吗
本文关键字:调用 参数 函数 返回 变量 一个 存储 | 更新日期: 2023-09-27 18:28:32
嗨,我在unity中集成了facebookSDK,基本上我之前在java中工作过,我是c#脚本的新手,我想到了一个问题。我搜索了很多,但一无所获,可能是我的搜索查询是否足够好,但我的问题是。。。
作为函数FB.init,这里称为
void Awake ()
{
FB.Init(InitCallback, OnHideUnity);
}
在这里,当调用init函数时,它将调用InitCallBack和OnHideUnity函数,并且两者都返回void,这些函数用于facebookunitisdk-docs
private void InitCallback ()
{
if (FB.IsInitialized) {
// Signal an app activation App Event
FB.ActivateApp();
// Continue with Facebook SDK
// ...
} else {
Debug.Log("Failed to Initialize the Facebook SDK");
}
}
private void OnHideUnity (bool isGameShown)
{
if (!isGameShown) {
// Pause the game - we will need to hide
Time.timeScale = 0;
} else {
// Resume the game - we're getting focus again
Time.timeScale = 1;
}
}
我的问题是,如果我调用这样的函数,而该函数返回一些东西,例如字符串,我想存储它,比如这个
String result="";
SomeFunctions(FunctionOne,result=FunctionTwo);
String FunctionTwo()
{
return "a String";
}
这可能吗?是否有任何方法可以获取此类函数调用返回的值?或者,可以用这种方式调用返回值的函数吗?
您似乎混淆了函数表达式的委托。委托在作为函数调用之前不会有返回值。
void SomeFunction(Func<string> func) {
var result = func(); // only here will the function return value be accessible
Console.WriteLine(result);
}
SomeFunction(() => "test");
尽管您不能访问函数的返回值,但委托可以在其方法体中分配您选择的变量,而不是使用它的返回值:
string result;
SomeFunction(() => {
result = "test";
return result;
});
// result would now contain "test"
我不确定您想在这里实现什么,但您可以使用out
来更改参数的引用。
string result="";
MyMethod(out result);
Debug.Log(string.Format("Result: {0}", result));
void MyMethod(out string pValue)
{
pValue = "my changed value";
}
out关键字导致参数通过引用传递。这与ref关键字类似,只是ref要求在传递变量之前对其进行初始化。若要使用out参数,方法定义和调用方法都必须显式使用out关键字。
https://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx
但在这种情况下,您可以返回正确的值。在下面的例子中,它甚至不值得传递参数,因为我们没有使用它
string result = MyMethod(result);
string MyMethod(string pValue)
{
pValue = "My changed value";
return pValue;
}