NetLogo自定义扩展命令参数错误

时间:2014-09-18 12:24:25

标签: netlogo

我从自定义扩展程序“myextension”中遇到了一个问题。我正在使用NetLogo v.5.0.5。

这是Java类记者的代码:

public class DoActionPrimitive extends DefaultReporter {

    @Override
    public Syntax getSyntax() {
        return Syntax.commandSyntax(
                new int[]{
                    Syntax.WildcardType(), // Platform
                    Syntax.StringType(),   // Action
                    Syntax.ListType()},    // Parameters
                Syntax.WildcardType());
    }

    public Object report(Argument[] args, Context context)
        throws LogoException, ExtensionException {

       // Reporter code
    }
}

这是给出NetLogo编译错误的代码:

extensions [myextension]

globals [platform]

turtles-own [logged-in?]

to setup
  clear-all
  reset-ticks
  create-turtles population 
  set platform myextension:create "Platform"
  ask turtles [ set logged-in? login ]
end

to-report login 
  report myextension:do-action platform "login" ["test-user" "123456"]
end

NetLogo代码选项卡在行上显示语法错误:

report myextension:do-action platform "login" ["test-user" "123456"]

带有消息:

"MYEXTENSION:DO-ACTION expected 8191 inputs, any input, a string and a list."

我猜想记者语法有问题,也许不可能将WildcardType与其他参数混合在一起。我也试过切换第一个和第二个参数,所以在WildcardType之前使用StringType但是错误是相同的但是在错误消息中切换参数。

为什么NetLogo在我指定的语法输入之前需要8191个输入?

谢谢!

1 个答案:

答案 0 :(得分:1)

您使用的Syntax.commandSyntax仅用于命令。你想要Syntax.reporterSyntax。假设Syntax.WildcardType()是您的返回类型,并且您希望记者可以由任何代理运行,您可以将Syntax.commandSyntax更改为Syntax.reporterSyntax我相信。这会调用this implementation of reporterSyntax

您收到该错误消息的原因(如果您感到好奇)是因为您的代码正在调用this implementation of commandSyntax。然后将第二个参数解释为命令的默认参数个数(它旨在与可变参数命令一起使用)。 NetLogo中的类型是每个二进制数字对应于某种基本类型的数字。对于所有允许的类型,该数字为1,对于不在其二进制表示中的数字,该数字为0。因此基本类型(NumberTypeStringType等)在一个数字中只有1。 WildcardType应该是任何东西,因此它应该在与该类型对应的所有数字中都有1。它的二进制表示为1111111111111,十进制为8191,即错误消息中的数字。