在后台看到有粉丝对于定义动态数组有以下疑问:
2 代码展示
2.1 非动态数组
fish def _arrCre
array arr1(10)
array arr2(3,4)
end
@_arrCre
本文的动态数组指使用者在建立数组时,数组的维度和尺寸是一个变量,比如要使用一维数组接收网格点位移时,则数组的尺寸应为网格点的个数。此时若运行以下代码,则会报图2中的错误,提醒你应该在array arr( )的括号中填入1~2147483647间的整数。
model new
zone create brick size 6 6 6
fish def _arrCre
gpNum = 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 new
zone create brick size 6 6 6
fish def _arrCre
gpNum = gp.num()
arr1 = array.create(gpNum)
; 输出数组尺寸以确认创建了目标尺寸数组
io.out(array.size(arr1,1))
end
@_arrCre
方案2——新建fish函数
model new
zone create brick size 6 6 6
获取模型节点数并赋值给变量gpNum
fish def _getGpNum
gpNum = gp.num()
end
@_getGpNum
创建数组
fish def _arrCre
array arr1(gpNum)
arr1 = array.create(gpNum)
输出数组尺寸以确认创建了目标尺寸数组
io.out(array.size(arr1,1))
end
@_arrCre
3 小结