首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Netlogo扩展API -如何警告用户错误?

Netlogo扩展API -如何警告用户错误?
EN

Stack Overflow用户
提问于 2019-08-29 23:05:36
回答 1查看 84关注 0票数 1

我正在做一个netlogo扩展,为代理添加q-learning comportament。

开发人员必须使用报告器state-def agentset [variables to be mapped]来告诉扩展它必须将该品种的指定变量映射为状态的一部分。

所以开发者可以这样使用这个扩展:

代码语言:javascript
运行
复制
extensions [qlearningextension]

breed [Creatures Creature]

Creatures-own [
  name
]

to setup
  ask patch 0 0 [
    sprout-Creatures 1 [
      set name "joao"
    ]
  ]
  show qlearningextension:state-def Creatures ["nameee"]
end

由于扩展拥有一个名为name的变量,并且开发人员正在传递"nameee“,因此扩展将抛出一个异常,说明"Breed extensions不拥有NAMEEE”。

我想知道是否有一种方法可以告诉用户他犯了一个错误,就像netlogo那样提醒他(图片中的例子)。

EN

Stack Overflow用户

发布于 2019-08-30 04:08:01

我能想到几种选择。

选项1

如果可以使用turtles-own变量(而不是breeds-own),那么可以在原语的系统定义中使用Syntax.ReferenceType。当NetLogo看到这个原语时,if将检查该参数是否为它所知道的变量的名称,并给出一个编译时错误,这与您给出的balck错误非常相似。

以下是Scala中的一个示例:

代码语言:javascript
运行
复制
object ReferenceTypeTest extends api.Command {
  override def getSyntax =
    commandSyntax(
      right = List(ReferenceType),
      agentClassString = "-T--"
    )

  def perform(args: Array[api.Argument], context: api.Context) {
    val ref: Reference = args(0).asInstanceOf[org.nlogo.nvm.Argument].getReference
    println(ref.vn)
  }
}

args获得的Reference值提供了变量vn,可以与代理的变量数组一起使用,以根据需要获取或设置值。

一个棘手的事情是,NetLogo将验证引用参数是否为真实变量,但它不会确认该变量是否用于特定的代理或品种。

选项2

这显然没有编译时消息那么好,但如果某种泛型参数找不到异常,它会更有帮助。

选项3

编辑以添加此文件。

该符号将包含一些令牌信息。与选项1一样,这不会防止给定不正确的变量(因此仍然需要运行时检查),但它至少会让用户为原语指定自己的变量名,并完成基本的编译时正确性检查。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57713019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档