我是NetLogo的新手,我对以下代码有一些疑问:
people-own [
walker-type ;; can be "cautious", "adaptive" or "reckless"
walked-through-red?
own-profit
adaptive-threshold-time-gained
adaptive-threshold-time-gained-people-crossing
adaptive-gone-reckless
cooldown
]
在OO背景下,我将此视为某种对象属性的枚举(people
品种)。你可以清楚地看到,有三种类型的人:谨慎的步行者,自适应步行者和鲁莽的步行者。此外,以adaptive
(adaptive-threshold-time-gained
等)开头的属性仅在当前人为adaptive
时才有意义。
我希望有一些方法可以更优雅地表达这一点。在OO编程语言中,您将使用继承来创建三个子类(每个walker-type
一个),但到目前为止,我知道在NetLogo中不存在。
推荐表达方式是什么?
答案 0 :(得分:3)
缺乏继承(可能是子品种)是NetLogo的一个严重限制,尽管最终它只是偶尔对我很重要。根据应用程序的不同,有几种可能的解决方法。
如果您只是想要一些不同的数据属性,并且相关类型是模拟中唯一的turtles
,那么您可以turtles-own
具有共同特征并且只有breeds-own
特定类型的特征。
如果数据属性全部共享但行为不同,您可以创建自己的代理集(在您的情况下,people
的子集)并在每个代理集上调用不同的过程(或编写过程在member?
测试中分支。不幸的是,如果创建了任何新成员,则必须显式扩充这些代理集,因此您将丢失品种的“特殊代理集”功能。
第h