2014-09-18 5 views
2

У меня проблема с репортером из пользовательского расширения «myextension». Я использую NetLogo v.5.0.5.Ошибка настройки параметров командной строки NetLogo

Вот код класса 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 код дает ошибку синтаксиса на line:

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

с t он сообщение:

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

Я думаю, что-то не так с синтаксисом репортера, возможно, не представляется возможным, чтобы иметь WildcardType смешанное с другими параметрами. Я также попытался переключить первый и второй параметры, поэтому имея StringType до WildcardType, но ошибка такая же, но переключение параметров в сообщении об ошибке.

Почему NetLogo ожидает 8191 входов до моих указанных входов синтаксиса?

Спасибо!

+0

Фантастически хорошо написанный вопрос кстати. –

ответ

1

Вы используете Syntax.commandSyntax, который предназначен только для команд. Вы хотите Syntax.reporterSyntax. Предполагая, что Syntax.WildcardType() должен быть вашим типом возврата, и вы хотите, чтобы репортер был запущен любым агентом, вы можете просто изменить Syntax.commandSyntax на Syntax.reporterSyntax Я верю. Это вызывает this implementation of reporterSyntax.

Причина, по которой вы получали это сообщение об ошибке (если вам интересно), заключается в том, что ваш код вызывал this implementation of commandSyntax. Второй параметр затем интерпретируется как количество аргументов команды по умолчанию (оно предназначено для использования с переменными командами). Типы в NetLogo - это номера, где каждая двоичная цифра соответствует некоторому базовому типу. Число имеет 1s для всех разрешенных типов и 0 для тех, которые не находятся в двоичном представлении. Таким образом, основные типы (NumberType, StringType и т. Д.) Имеют 1 в точности одну цифру. WildcardType должен быть чем угодно, поэтому он должен иметь 1s во всех цифрах, соответствующих этому типу. Его двоичное представление - 1111111111111, которое в десятичном формате равно 8191, номер из сообщения об ошибке.

+0

Спасибо, Брайан !!! Я искал ошибку часами ... стыдно за меня, на самом деле я также закодировал другие команды и репортеров с правильной инициализацией синтаксиса. Мне нужно больше спать! : D –

Смежные вопросы