使用以下代码:
breed [girls girl] ;pink
breed [boys boy] ;green
to go
clear-all
create-girls 10 [move-to one-of patches]
create-boys 10 [move-to one-of patches]
end
我期待下一行让女孩们展示相同颜色男孩的数量,即“显示男孩的颜色等于我的颜色”:
ask girls [show count boys with [color = [color] of self]]
但是这取决于每个男孩。这是完成工作的代码:
ask girls [show count boys with [color = [color] of myself]]
为什么自我(我)指的是男孩和我自己(问我的乌龟)是指女孩?关键字“with”是否要求男孩们做点什么,那是什么让它转过来?
答案 0 :(得分:2)
简答:是的。
ask
和with
原语都适用于在特定代理的上下文中运行的“代码块”(由[
和]
分隔的部分) 。在该块中,self
引用当前代理(来自块上下文的代理)和我自己到“外部”代理(在with
或ask
的上下文中。叫)。
ask
和with
之间的主要区别在于ask
采用命令块(最有可能 )和with
采用记者块(只返回一个值)。
请注意,with
并不是使用记者块的唯一原语:of
是另一种常见情况。使用前一个示例的变体:
ask girls [
show [color = [color] of myself] of boys
]
每个女孩都会显示一个布尔值列表(列表中每个男孩的一个值,按随机顺序排列):true
如果男孩的颜色与女孩颜色相同,false
否则