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));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值