我试图将一段旧代码移植到最新版本( 6.0.1 ),下面的foreach循环在Net徽标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传入的“段”变量包含以下列表:
setup-row 4 blue [[-8 -5] [-3 -1] [0 3] [5 9]]如果代码工作正常,它应该用-8 (项目0 ?)检索-8。和-5与(项目1 ?)诸若此类。我在旧代码中假设的是"?“第一个列表是否从片段(-8-5)和(项目0)中检索?检索-8和(项目1 ?)找回了-5。
我试着阅读新的用户手册,找出一些类似的东西,但是没有用,或者我找错地方了。希望你们中的一些人能为我指明正确的方向。
发布于 2017-05-05 07:54:57
是的,这在Netlogo 6.0中已经被改变了--参见过渡指南页。有关新foreach语法的更多细节,请参见字典条目。基本上,现在不用使用?,而是显式地定义要在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在这里,我明确声明列表项将在整个过程中被称为"xy_coords“。这是一个很好的更改,允许更易读的代码,因为您的变量可以有更有意义的名称。
https://stackoverflow.com/questions/43798668
复制相似问题