我正在尝试将旧代码移植到最新版本(6.0.1),以下 foreach 循环在 Netlogo 4.1.3 上运行良好,但是当将代码复制并粘贴到版本 6.0.1 时,出现“item 0 ?” 不起作用。它说的是“?” 未定义。该行代码应该检索段内列表的项目
to setup-row [row colour segments]
foreach segments
[
if pycor = row * row-patches-width and
(pxcor >= col-patches-width * (item 0 ?)) and (pxcor <= col-patches-
width * (item 1 ?))
[set pcolor colour
output-print item 0 ?]
]
end
Run Code Online (Sandbox Code Playgroud)
传入的“segments”变量包含以下列表:
setup-row 4 blue [[-8 -5] [-3 -1] [0 3] [5 9]]
Run Code Online (Sandbox Code Playgroud)
如果代码工作正常,它应该使用 (item 0 ?) 检索 -8,使用 (item 1 ?) 检索 -5,依此类推。我在旧代码中假设的是“?” 是从 [-8 -5] 段中检索到的第一个列表,(项目 0 ?)检索到 -8,(项目 1 ?)检索到 -5。
我试图通读新的用户手册,以找到类似的东西,但无济于事,或者也许我没有找对地方。希望你们中的一些人能给我指出正确的方向。
是的,Netlogo 6.0 中对此进行了更改 - 请参阅转换指南页面。有关新foreach语法的更多详细信息,请参阅字典条目。基本上,您不使用?now,而是显式定义要在过程中使用的变量名称foreach。按照上面的列表示例:
to foreach-example
let ex [ [-8 -5] [-3 -1] [0 3] [5 9] ]
foreach ex [
[ xy_coords ] ->
ask patches with [ pxcor = (item 0 xy_coords) and pycor = ( item 1 xy_coords) ] [
set pcolor white
]
]
end
Run Code Online (Sandbox Code Playgroud)
在这里,我明确指出在整个过程中列表项将被称为“xy_coords”。这是一个很好的更改,可以使代码更具可读性,因为您的变量可以具有更有意义的名称。
| 归档时间: |
|
| 查看次数: |
2285 次 |
| 最近记录: |