NetLogo Levelspace父模型向子模型全局变量传字符串报错求助
解决NetLogo Levelspace中父模型字符串传递给子模型全局变量的问题
我来帮你搞定这个Levelspace的变量传递问题!你遇到的错误核心是ls:ask的使用格式不对——它要求接收一个匿名命令块(用方括号[]包裹),而你原来的代码里的命令结构不符合这个要求。
错误原因分析
你原来的代码:
ask Kanban-Teams [ if k-model-id = 0 [ ls:ask 0 [ ls:assign capacity-input KanbanDev3 setup ] ] ]
问题出在ls:ask 0后面的命令块里:你把setup直接跟在ls:assign后面,导致Levelspace无法识别合法的命令结构,误以为你给ls:assign传了多余的参数,或者整个内容不是一个有效的匿名命令。
修正后的代码写法
如果你想先把父模型的KanbanDev3(字符串全局变量)赋值给子模型的capacity-input全局变量,再运行子模型的setup命令,正确的写法应该是把这两个操作放在同一个匿名命令块里,分开写成独立的命令:
ask Kanban-Teams [ if k-model-id = 0 [ ls:ask 0 [ ; 第一步:将父模型的KanbanDev3值传给子模型的capacity-input全局变量 ls:assign capacity-input KanbanDev3 ; 第二步:运行子模型的setup命令(如果需要的话) setup ] ] ]
用ls:let的替代写法
如果你想用ls:let来实现赋值,同样要遵循匿名命令块的规则,写法如下:
ask Kanban-Teams [ if k-model-id = 0 [ ls:ask 0 [ ls:let capacity-input KanbanDev3 setup ] ] ]
额外注意事项
- 确保父模型的
KanbanDev3确实是字符串类型的全局变量,子模型的capacity-input也是全局变量(且没有被限制为数值类型),这样赋值才不会出现类型不匹配的问题。 ls:ask的作用是让指定的子模型执行命令块里的内容,所以所有要在子模型中执行的操作都必须放在[]包裹的命令块内。
内容的提问来源于stack exchange,提问作者Rudolph Johnson
相关产品推荐
相关产品推荐

