如何解决在 Netlogo 中将字符串转换为变量名
我试图使用 set
命令更新一堆全局变量。
全局变量是不同字符串的组合。
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
命令更新它。
有什么办法可以在 Netlogo 的 foreach
循环中将字符串转换为变量名称吗?
解决方法
您可以在字符串上使用 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 举报,一经查实,本站将立刻删除。