Есть ли способ удалить параметры во время выполнения? - PullRequest
0 голосов
/ 30 января 2019

Я создаю группу агентов, использующих около 40 сопоставленных параметров.Эти параметры просто используются при инициализации населения.Однако проблема состоит в том, что при создании нового агента эти многие параметры будут требоваться в аргументах без фактической необходимости в них.Просто чтобы дать вам представление о том, как уродливо это выглядит.

add_households(int, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, boolean) 

Поэтому мне было интересно, есть ли способ удалить / скрыть эти параметры после того, как они больше не нужны.Было бы здорово выглядеть так:

add_households(int, boolean)

Если это невозможно, я буду искать и другие решения:

  • Может быть, есть что-топохож на отображение параметров для переменных.(поскольку переменные не будут показаны в качестве аргументов.

  • Перемещение всего населения после инициализации в новый класс агента только с требуемыми параметрами. (Главное здесь - сохранить созданные подключенияс другими классами агентов)

Я ценю любые другие предложения по этой проблеме. Заранее спасибо;

Возможное решение

Предложение Эми изящнона мой взгляд. Однако, это не сработало точно так, как предлагалось. При наборе: objHousehold.initRuntimeParamters( set_age(5), set_p_HH_willing_to_change(true)); Выдает ошибку, в которой говорится:

The method set_age(int) is undefined for the type Main.
The method set_p_HH_willing_to_change(boolen) is undefined for the type Main.

Однако, с небольшим изменением мне удалось получить доступ к требуемым параметрам тольконабрав:

Household objHousehold = add_households();
households(objHousehold.getIndex()).set_age(5);
households(objHousehold.getIndex()).set_p_HH_willing_to_change(true);

1 Ответ

0 голосов
/ 30 января 2019

Вы всегда можете сделать add_households (), который будет принимать параметры по умолчанию.Затем вы можете вызвать функцию, чтобы установить только те 2, которые вас интересуют.

Household objHousehold = add_households();
objHousehold.initRuntimeParamters( int, boolean );

в initRuntimeParameters, используйте set_parameterName (значение) для установки значения параметра.

...