MATLAB函数之间传递参数的消息机制

前言

本文介绍了一种函数与函数之间相互传递参数的方法,可以方便的实现函数与函数之间传递参数,并且不会产生混乱,更不会导致全局变量的滥用。本文所编写的程序使用MATLAB语言,对其他编程语言也可以借鉴其思想。

背景

一般的函数与函数传递参数使用形参输入,但是这种方法导致形参固定(或者可变),需要程序对输入变量进行解析,而且必须相互调用才能传递参数,这样传递参数的效率很低,而且很不方便。最常见的方法为定义全局变量,然后在每个函数中声明全局变量,但是这种方法常常导致全局变量的滥用,容易导致变量的重名和混淆,不利于程序的模块化编程。本文介绍的传递参数方法虽然也是使用的全局变量,但是在使用时是利用一套函数对全局变量进行操作,实现函数与函数传递变量更加灵活和安全。

介绍

本方法利用一套函数对全局变量操作,可以实现以下功能:

  1. 函数与函数之间的定点发送,其他函数不能接收到
  2. 函数与所有函数之间的广播发送,所有函数均能收到
  3. 取消传递的参数

函数用法示例

利用历史计算结果加速重复调用函数时的调用速度

名称为fun1的函数发送给自身消息,例如fun1功能为执行特定的计算,并将计算得到的结果输出。且该函数的计算结果(输出)在多处使用到,由于程序由多个函数组成,且经常形成函数互相调用的情况。因此,当其他函数需要使用fun1输出的计算结果时,常常由于函数之间多层调用的关系获取不到fun1的输出结果。为了避免其他函数调用fun1从而导致重复执行fun1的情况,利用将消息发送给自身的方法,提高效率。

function [res1,res2] = fun1(par1,flush)
% 当输入为两个参数时,将重新计算;可控制是否重复执行该函数
if nargin > 1
    messages_clear( 'fun1' );
end
%%%%%%%%%%%%%%%%%%%%%%%%
% 获取消息,首次执行该函数时消息为空,执行函数的具体内容
message = message_get();
% 首次执行该函数的最后部分将计算结果发送给自身,因此非首次进入时直接获取首次执行结果,并返回函数,避免了多次运行该函数,提高了运行效率
if isfield( message, 'res1' ) && isfield( message, 'res2' )
    res1= message.res1;
    res2= message.res2;
    return ;
end
%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数执行的具体内容,用于输出结果的计算
%%%%%%%%%%%%%%%%%%%%%%%%%
% 将结果发送给自身,导致本函数仅执行首次,第二次进入时直接获取消息
messages_sendto( 'fun1', 'res1', res1);
messages_sendto( 'fun1', 'res2', res2);

这种使用方法包含三要素:

  1. 是否控制函数重新计算,有时可能需要函数重新计算,舍去历史计算的结果
  2. 检查是否自身发送的结果,当存在时直接读取
  3. 最后将计算的结果发送给本身,加快调用速度
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值