string - 在 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
命令对其进行更新。
有什么方法可以将字符串转换为foreach
Netlogo 循环中的变量名?
解决方案
您可以在字符串上使用原run
语来执行从字符串构建的 NetLogo 代码。您可以将其用于set
全局变量。word
您可以构造整个set a_x 1
语句,然后再构造整个语句,而不是只构造变量名run
。
let
但是,由于run
与字符串值一起使用时处理范围的方式,这不适用于局部变量。
所以这里是你的样本更新了全局变量,这将起作用:
globals [
a_x
b_x
c_x
a_y
b_y
c_y
]
to test
clear-globals ; reset to `0`
let first_list (list "a" "b" "c")
let second_list (list "x" "y")
foreach first_list [
[i] -> foreach second_list [
[j] -> run (word "set " i "_" j " " 1)
]
]
show a_x ; outputs `1`
end
编辑以添加第二个选项。
您也可以使用扩展table
名来存储值。它可以使用字符串作为键(你的变量名),并存储你喜欢的任何值。根据您的用例,这可能总体上更容易/更简单。
推荐阅读
- javascript - 我如何在 Sequelize 中找到一小时后的值
- javascript - 如何为尝试在没有互联网的情况下连接到页面的人制作自定义错误页面?
- java - midi.Sequencer 的序列何时结束?
- python - 如何确定至少一个 2 项集是否在 3 项集列表中?
- amazon-web-services - 如何限制数据存储库站点上用户的公开下载?
- typescript - TypeScript:如何正确键入此 `groupBy` 函数
- python - Pycares (Setup.Py) 错误的构建轮
- javascript - 手风琴菜单有一个跳跃的过渡
- python - 如何调整散点图的标记大小,使其匹配给定的半径?(使用 matplotlib 转换)
- d3.js - 为 d3.select 元素指定的宽度/高度与实际绘图区域之间的关系是什么?