微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Netlogo 中将字符串转换为变量名

如何解决在 Netlogo 中将字符串转换为变量名

我试图使用 set 命令更新一堆全局变量

全局变量是不同字符串的组合。

例如,我有 6 个全局变量

a_x、b_x、c_x、a_y、b_y、c_y

我想使用 foreach 命令将所有六个全局变量的值更新为 1。

下面是我的代码

let a_x 0
let b_x 0
let c_x 0
let a_y 0
let b_y 0
let c_y 0

let first_list (list "a" "b" "c")
let second_list (list "x" "y")

foreach first_list [
   [i] -> 
   foreach second_list [
     [j] -> 
   set (word i "_" j) 1
 ]
]

我收到了“这不是您可以使用“设置”的内容错误消息。

我想我可能需要将字符串 (word i "_" j) 转换为变量名,以便 Netlogo 可以通过 set 命令更新它。

有什么办法可以在 Netlogoforeach 循环中将字符串转换为变量名称吗?

解决方法

您可以在字符串上使用 the run primitive 来执行您从字符串构建的 NetLogo 代码。您可以将其用于 set 全局变量。您可以构造整个 word 语句,然后 set a_x 1 那个。

这不适用于局部 run 变量,但是,由于 let 在与字符串值一起使用时处理范围的方式。

这里是您的示例,其中更新了可以工作的全局变量:

run

编辑以添加第二个选项。

您也可以使用 the table extension 来存储值。它可以使用字符串作为键(您的变量名称),并存储您喜欢的任何值。根据您的用例,这总体上可能会更容易/更简单。

,

恐怕你不能那样做。您试图将包含变量名称的字符串视为变量,这不起作用。

也许你能得到的最接近的是这个,假设 a_x b_x c_x ...已经定义为全局或局部变量:

让变量列表(列表 斧头 b_x c_x ...)

foreach list-of-variables [ next-variable -> set next-variable 1 ]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。