在编写Simtalk程序时,不可避免的会出现函数调用的情况,下面将介绍三种不同的函数调用形式,并说明其各自的特点,供大家参考。

直接调用

直接调用是最常用的函数调用方式,函数直接调用最为简单,也是使用最为频繁的调用方式。

如上图所示在Source出口处触发Main函数,在Main函数中采用直接调用的方法触发Method函数,函数代码如上图所示。输出结果如下:

Method
@值为:.MUs.Entity:1
?值为:.Models.Frame.Main
Main

由输出结果可以看出:

  1. 函数的执行顺序为:出现直接调用时,先执行调用的函数,当调用函数执行结束后,继续执行原函数中剩余的语句。所以上例中函数Method优先执行,然后执行Main函数后续语句。
  2. 直接调用不会改变 @ 的值,但是会将 ? 的值变为原函数对象。

使用methCall函数调用

使用methCall函数的最大的功能为可以控制函数调用的时间。当调用等待时间为0时,程序执行顺序与直接调用不同。

如上图所示在Source出口处触发Main函数,在Main函数中采用methCall的方法触发Method函数,函数代码如上图所示。输出结果如下:

Main
Method
@值为:VOID
?值为:.Models.Frame.EventController

由输出结果可以看出:

  1. 函数的执行顺序为:出现直接调用时,先执行原函数中剩余的语句,等待相应的时间后再由EventController触发被调用函数。所以上例中Main函数执行完成后立即执行Method函数。
  2. @的值变为空值,?值变为事件控制器对象

使用execute函数调用

execute函数主要有两种功能:其一为通过地址间接调用函数,详见函数间接调用:execute;第二种为可通过execute修改调用函数时传递的 @ ,  ? 的值。

如上图所示在Source出口处触发Main函数,在Main函数中采用直接调用的方法触发Method函数,函数代码如上图所示。输出结果如下:

Method
@的值为:.Models.Frame.Source
?的值为:.Models.Frame.Drain
Main

由输出结果可以看出:

  1. 函数的执行顺序同直接调用:出现直接调用时,先执行调用的函数,当调用函数执行结束后,继续执行原函数中剩余的语句。
  2. 可以通过execute可将@和 ? 的值作为传入值,直接改变@和 ? 的值。

发表评论