NetLogo嵌套ask中设置调用breed变量失败问题求助
在NetLogo嵌套ask中让子海龟修改父海龟变量的解决方案
你遇到的问题是:在嵌套ask结构里,子海龟无法通过set ([b] of myself) 14修改父海龟(turtle 0)的变量,报错提示“This isn't something you can use "set" on.”。
错误原因
([b] of myself)返回的是父海龟变量b的当前数值,而非变量本身。set命令需要直接指定变量名,不能对一个数值进行赋值操作,因此会报错。
解决方案
直接让父海龟自身执行变量赋值操作即可,使用ask myself [set b 14]替代原来的错误写法。myself在嵌套ask中指向发起当前嵌套调用的父海龟(这里就是turtle 0),通过ask myself可以让父海龟主动修改自己的变量。
修改后的go过程代码如下:
to go ask turtle 0 [ set a 2 set b 3 show (word "(a, b) = (" a ", " b ")") ask other turtles [ show (word "(a, b) = (" a ", " b ")") set a a + 1 set b b + 1 show (word "(a, b) = (" a ", " b ")") ; 替换为正确的写法 ask myself [set b 14] ] ] tick end
结果验证
运行一次go过程后,所有子海龟都会触发父海龟(turtle 0)将b设为14。下次运行go时,turtle 0的初始b值就会是14,输出结果符合你的预期:
(turtle 0): "(a, b) = (2, 14)" (turtle 3): "(a, b) = (1, 1)" (turtle 3): "(a, b) = (2, 2)" (turtle 1): "(a, b) = (1, 1)" (turtle 1): "(a, b) = (2, 2)" (turtle 2): "(a, b) = (1, 1)" (turtle 2): "(a, b) = (2, 2)"
内容的提问来源于stack exchange,提问作者mijen67
相关产品推荐
相关产品推荐

