NetLogo能否将turtles-own变量设为列表或数组,相关报错如何解决?
NetLogo问题解答
核心问题答复
turtles-own变量完全支持设置为数组或列表类型,NetLogo对海龟自定义变量的存储类型没有限制,数值、字符串、列表、数组都可以直接存储。
报错原因说明
你遇到的报错和数组类型设置无关,属于上下文调用错误:ETRatioValue是你声明的海龟专属变量,只能在海龟上下文(也就是ask turtles包裹的代码块内)对该变量执行赋值操作,你当前的代码中set ETRatioValue array:from-list n-values 8[0]这行写在了观察者上下文(没有包在ask块里),系统判定你在观察者层级调用海龟专属变量,因此触发了对应报错。
代码修改方案
如果使用数组类型,需要在代码最开头引入array扩展,同时完成海龟自定义变量声明,修改后的完整可运行逻辑参考:
extensions [array] turtles-own [ Name ETRatioValue ] to test file-open "file" show "Starting" let a1 array:from-list n-values 368 [0] let i 0 let j 0 let k 0 while [not file-at-end?] [ let line file-read array:set a1 j line set j j + 1 set i i + 1 while [i != 7] [ ; 原观察者层级的set ETRatioValue语句已移除,直接在ask块内赋值 ask turtles with [Name = k] [ set ETRatioValue array:item a1 k ] set k k + 1 ] set i 0 show line ] show "Fishing Ratio" show "Adding values to array" print a1 file-close end
补充说明
如果你需要每个海龟的ETRatioValue初始化固定为长度为8的全0数组,可在创建海龟时就完成初始化,示例如下:
create-turtles 10 [ set Name who ; 此处为示例赋值,可按你的业务逻辑修改 set ETRatioValue array:from-list n-values 8 [0] ]
内容的提问来源于stack exchange,提问作者Sebastian Gomez Carrosa
相关产品推荐
相关产品推荐

