一个值可以存储在作为参数调用的函数返回的变量中吗

本文关键字:调用 参数 函数 返回 变量 一个 存储 | 更新日期: 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;
}