TSL函数除了支持直接通过函数名方式进行调用外,还支持多种动态方式进行调用。
目前支持的动态调用方式如下:
其中,
1、表达式方式一般多用于技术指标的实现中,对于同一个算法,进行不同方式的多层嵌套时,比较便利,可避免多次重复描述,用法可参考:
TExpression
2、CALL、 CALLINARRAY实现函数的动态调用
如果在开发某个应用,希望使用回调函数,使用
Call会很方便实现:
例如: IntToStr是一个整数转换为字符串的函数,我们使用CALL(“IntToStr”,111)可以得到字符串”111”
CALL函数还可以做更复杂的工作,例如调用单元内的函数以及调用函数指针等等。
CALLInArray与Call非常类似,差异在于,
CallInArray将所有的参数放置于一个数组中,例如CallInArray(“StrToIntDef”,array(S,0))
而Call则是Call(“StrToIntDef”,S,0)
对于Unit中的函数,可以采用”unitname.functionname”的方式来调用。
Call,CallINArray支持对函数名的调用,除此以外,他们也支持调用函数指针。
函数指针的实质就是函数方法的引用。使用FindFunction和ThisFunction可以查找函数。
TSL还支持匿名函数,匿名函数也是函数指针类型。
3、匿名函数可以方便在程序中构造一个临时函数,可以直接使用##方式的调用,具体可参考:
匿名函数
4、为了方便外部语言调用TSL函数,可通过
MakeInstance将TSL函数生成C的函数指针。
5、可通过
Invoke以及
Invokeinarray方法调用对象方法。