【问题标题】:Netlogo Error: Nothing named NAME? has been definedNetlogo 错误:没有任何名称?已定义
【发布时间】:2017-04-12 19:21:22
【问题描述】:

这是我第一次来这里,所以如果我没有正确使用它,请告诉我。 我刚开始使用 Netlogo,我有点困惑。 在模型库中有 Wolf Sheep Predation 的示例代码。在这段代码中定义了以下内容:

globals [grass] 

所以一切正常。但后来我开始编写自己的代码,以此为基础,我遇到了以下错误:

没有什么叫氧气?已定义。

其中氧气是我自己的变量。为了找出问题所在,我回到 Wolf Sheep Predation 模型并尝试将全局名称更改为其他名称。例如:奇怪,(用find and replace all,也用手几次)。结果是同样的错误,而如果我只将草更改为草,它将起作用。现在我想知道是否有任何关于 Globals 的具体规则以及它们是如何使用的,是否有人可能知道为什么在 Wolf Sheep Predation 模型中仍然给出这个错误?

(我会分享我自己的模型,但它已经变得很长,所以它可能不是一个有用的例子)。

【问题讨论】:

  • 所有全局变量必须用globals声明。
  • 嗯,是的,但这意味着什么?为什么当您仅更改全局变量的名称(当然所有指定为相同名称的所有变量)时,程序就不再工作了?
  • 如果您只替换在globals 中声明的变量的名称,一切都会正常工作。但是您在引入名为 Oxygen? 的变量时声明了 Oxygen
  • 如果您分享一个可重现的代码示例,它将帮助我们解决您的问题。随意劫持我用来提问的模型:stackoverflow.com/questions/40730974/…

标签: model netlogo globals


【解决方案1】:

您必须小心查找和替换。在“狼羊捕食”模型中,有两个名称非常相似的全局变量。首先是grass 变量,它在globals [grass] 部分中定义。其次,接口上有一个名为grass? 的开关变量。

如果您执行查找和替换并将代码中的所有“草”字符串替换为“mystring”,grass 将更改为mystring,但grass? 也将更改为mystring?。因为grass?是在模型的接口上定义的,所以这个全局的名称将保持不变,代码会产生错误,因为你在代码中引用mystring?,但是这个全局既没有定义在接口上,也没有定义在全局变量声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2021-09-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多