在后台看到有粉丝对于定义动态数组有以下疑问:


2 代码展示
2.1 非动态数组
fish def _arrCrearray arr1(10)array arr2(3,4)end@_arrCre
本文的动态数组指使用者在建立数组时,数组的维度和尺寸是一个变量,比如要使用一维数组接收网格点位移时,则数组的尺寸应为网格点的个数。此时若运行以下代码,则会报图2中的错误,提醒你应该在array arr( )的括号中填入1~2147483647间的整数。
model newzone create brick size 6 6 6fish def _arrCregpNum = gp.num()array arr(gpNum)end@_arrCre
此时我们关注一下变量gpNum的类型与值,从图3可以看出,此时gpNum = 0,不在[1,2147483647]这个区间内,因此系统报错。对于这种情况,我个人的猜测是:在fish语言中,array命令的执行优先级大于gp.num( )函数,系统在执行上述代码时首先创建创建数组,而此时gpNum还没有被赋值,因此出现图2所示的报错。

图3 变量gpNum的值与类型
方案1———使用array.create()函数= array.create(数组尺寸)model newzone create brick size 6 6 6fish def _arrCregpNum = gp.num()arr1 = array.create(gpNum); 输出数组尺寸以确认创建了目标尺寸数组io.out(array.size(arr1,1))end@_arrCre方案2——新建fish函数model newzone create brick size 6 6 6获取模型节点数并赋值给变量gpNumfish def _getGpNumgpNum = gp.num()end@_getGpNum创建数组fish def _arrCrearray arr1(gpNum)arr1 = array.create(gpNum)输出数组尺寸以确认创建了目标尺寸数组io.out(array.size(arr1,1))end@_arrCre
3 小结