两周自制脚本语言-第8天 关联Java语言
第8天 关联Java语言 本章要达到的目的:扩展Stone语言,使它能在程序中调用Java语言中的static方法 8.1 原生函数 Java语言提供了名为原生方法的功能,用于调用C语言等其他一些语言写成的函数。我们将为Stone语言添加类似的功能,让它能够调用由Java语言写成的函数。 原生函数将由Arguments类的eval方法调用。 代码清单8.1是用于改写Arguments类的eval方法的修改器。 这个名为NativeArgEx的修改器标有extendsArgumentsEx一句,它修改的是Arguments类。 ArgumentsEx是第7天代码清单7.7中定义的另一个修改器。NativeArgEx修改器与ArgumentsEx修改器都有用于修改Arguments类,它将在后者的基础上对该类作进一步修改。 这里的修改器继承了另一个修改器。 通过这次修改,Arguments类eval方法将首先判断参数value是否为NativeFunction对象。参数value是一个由函数调用表达式的函数名得到的对象。eval方法之前返回的总是Function对象。如果参数是一个NativeFunction对象,eval方法将在计算实参序列并保存至数组args之后,调用NativeFunction对象的invoke来执行目标函数。如果参数不是NativeFunction对象