我正在尝试将旧代码移植到最新版本(6.0.1),以下foreach循环在Netlogo 4.1.3上正常工作,但是当将代码复制并粘贴到版本6.0.1中时,“项目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
传入的“segments”变量包含以下列表:
setup-row 4 blue [[-8 -5] [-3 -1] [0 3] [5 9]]
如果代码工作正常,它应该检索-8(项目0?)和-5(项目1?),依此类推。我在旧代码中假设的是“?”是从[-8 -5]中检索到的第一个列表,并且(项目0?)检索到-8而(项目1?)检索到-5。
我试图阅读新的用户手册,找到类似但无效的东西,或者我找不到合适的地方。希望你们中的一些人能指出我正确的方向。
答案 0 :(得分:4)
是的,在Netlogo 6.0中已经更改了 - 请参阅transition guide page。有关新foreach
语法的更多详细信息,请参阅dictionary entry。基本上,您现在不是使用?
,而是明确定义要在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
在这里,我明确声明列表项将被调用&#34; xy_coords&#34;整个过程。这是一个很好的变化,允许更可读的代码,因为你的变量可以有更有意义的名称。