Unity+C#例子:函数式编程之【调用一个函数后,返回不是简单数据类型或者复合数据类型,而是返回一个函数】

一般情况下,我们调用函数时,传的参数都是普通数据类型或者复合数据类型,如果你把一个函数也当作一个函数传来传去,那么这就有点那啥意思了,啥意思,函数式的意思。
在函数编程范式里面,函数成了一等公民,与普通数据类型平起平坐。

一、定义一个函数,他的返回类型不是普通值,而是一个函数

    /// <summary>
    /// 返回一个函数
    /// </summary>
    /// <returns>返回的函数为Func<string,string>类型:输入一个string,然后返回一个string </returns>
    Func<string,string> GetFunction()
    {
        Func<string,string> rtnFn = (name) => 
        {
            return name+" return";         
        };

        return rtnFn;
    }

上面定义了一个函数GetFunction(),它的返回值是一个函数,这个函数的签名为输入string 返回 string,也就是Func<string,string>。

二、测试这个函数

    /// <summary>
    /// just for debug
    /// </summary>
    public string arg;

#if UNITY_EDITOR
    [ContextMenu("测试")]
#endif
    void test()
    {
        var rtn = GetFunction()(arg);
        Debug.Log(rtn);

        //等效的写法
        var myFn = GetFunction();
        Debug.Log(myFn(arg));
    }

如图,用编辑器菜单直接测试:
在这里插入图片描述

三、测试结果

在这里插入图片描述

四、案例代码及说明

  • 1、测试环境:Unity2020.3 , C#8.0 ,Visual Studio 2022
  • 2、直接把下面的脚本挂在到scene中的一个物体上,然后进行测试

脚本【NewBehaviourScript .cs】代码清单

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class NewBehaviourScript : MonoBehaviour
{
    /// <summary>
    /// 返回一个函数
    /// </summary>
    /// <returns>返回的函数为Func<string,string>类型:输入一个string,然后返回一个string </returns>
    Func<string,string> GetFunction()
    {
        Func<string,string> rtnFn = (name) => 
        {
            return name+" return";         
        };

        return rtnFn;
    }

    /// <summary>
    /// just for debug
    /// </summary>
    public string arg;

#if UNITY_EDITOR
    [ContextMenu("测试")]
#endif
    void test()
    {
        var rtn = GetFunction()(arg);
        Debug.Log(rtn);

        //等效的写法
        var myFn = GetFunction();
        Debug.Log(myFn(arg));
    }
}

版权声明:本文为dzj2021原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。