Проблема с оператором переключения (Matlab)

Мне нужно выполнить большое количество итераций (10 ^ 6) для конкретной функции, которая вызывает несколько других функций. Одна из функций, которую он вызывает, имеет оператор case switch, поскольку код состоит из двух частей. Я, очевидно, не хочу, чтобы подсказка появлялась 10 ^ 6 раз, есть ли способ получить подсказку только в 1-й итерации и выполнить остальные итерации на основе этого выбора? Или есть другой способ, которым я мог бы пойти по этому поводу?

Спасибо, Джоджо


person Jojo    schedule 16.02.2014    source источник
comment
Я не понимаю проблемы. Почему бы вам не передать параметр, который определяется один раз при инициализации? Можете ли вы добавить код, объясняющий вашу проблему?   -  person Daniel    schedule 17.02.2014
comment
Вы можете сохранить ответ в файл и загружать его на каждой итерации. Не показывая свой код, нечего делать.   -  person LeonardBlunderbuss    schedule 17.02.2014
comment
какая подсказка появится?   -  person Autonomous    schedule 17.02.2014


Ответы (1)


То, что вы делаете здесь, вероятно, является проблемой дизайна, которую вы можете решить по-другому. Запрос параметра/опции глубоко внутри иерархии вызовов кажется неправильным. В любом случае, чтобы ответить на ваш вопрос, вы можете сделать этот параметр, назовем его множителем f, переменной persistent этой внутренней функции:

function c = dosomething(a, b)
  persistent f;
  while isempty(f)
      f = input('enter multiplier: ');
  end
  c = f * a + b;

В примере f будет пустым [] при первом вызове dosomething. В этом случае пользователю будет предложено ввести значение. В последующих вызовах f по-прежнему будет иметь это значение (из-за декларатора persistent), и пользователю больше не будет предлагаться.

гораздо лучшим решением может быть передача параметра внешней функцией в dosomething(a, b, f);, так что внешняя функция может быть той, которая выдает запрос пользователю.

person s.bandara    schedule 16.02.2014