nargin по сравнению с существуют

Помимо того, что вы объявили только функцию с ошибкой (обратите внимание на точку с запятой сразу после имени функции), ваш код не работает, потому что вы не передаете функцию в атрибуте кнопки onclick - вы просто передавая возвращаемое значение этой функции там. Вместо этого у вас должно быть <button onclick="myFunction">Check</button>.

Ниже правильный код:

function myFunction() {
  var text_input = document.getElementById("input001").value;
  if (text_input == "4") {
    document.getElementById("message001").innerText = "Correct!";
  } else {
    document.getElementById("message001").innerText = "nope";
  }
}
<div class=questions>
  <p>What is 9-5?</p>
</div>

<input id="input001" type="text" />
<button onclick="myFunction">Check</button>
<p id="message001"></p>
12
задан snth 9 April 2009 в 10:31
поделиться

4 ответа

Both should work. But...

Exist tends to be slow, since it must look through your workspace for the variable in question. When you write error checks like this, you don't want them to suck up CPU cycles. The test against nargin is a simple test against a single numeric value.

I'd also generally suggest a more extensive test. Something like

if (nargin<1) || isempty(myparam)

  myparam = defaultvalue;

elseif

  ...

end

Inside the elseif branch, I'll put a set of additional tests to see if the parameter has the expected size, shape, class of variable, etc. If those tests fail, I'll return a friendly error message that explains what was wrong.

10
ответ дан 2 December 2019 в 05:04
поделиться

Я бы пошел с nargin по двум причинам:

  1. Если вы измените порядок параметров для вашей функции, исправление код проверки ввода будет наименьшей из ваших проблем; вам также придется обновить все сайты вызовов для вашей функции.

  2. nargin намного дешевле. существует, даже если он предназначен для простой проверки переменных, должен сканировать все рабочее пространство, выполняя ряд сравнений строк. метод nargin состоит только из скаляра, меньшего, чем операция.

7
ответ дан 2 December 2019 в 05:04
поделиться

Я бы выбрал опцию NARGIN , по причинам, указанным SCFrench . Еще одно преимущество: я часто использую его в сочетании с оператором SWITCH , когда у меня более двух входных аргументов:

function outArgs = my_fcn(inArg1,inArg2,inArg3)
  switch nargin,
    case 0,  % No input case
      error('Not enough inputs!');
    case 1,  % Set last 2 inputs to default
      inArg2 = 'yes';
      inArg3 = 'on';
    case 2,  % Set last input to default
      inArg3 = 'on';
  end
  ...
  % Checking of variable types and values would go here! 
  ...
end
4
ответ дан 2 December 2019 в 05:04
поделиться

Я всегда проверяю аргументы, используя nargchk , а затем использую тесты nargin , как они у вас были. Как отмечали другие, они дешевле, и я думаю, что понятнее.

В функциях, которые я ожидаю интенсивного повторного использования, я всегда ставлю много проверок заранее, а затем структурирую код для вызова реальной реализации позже.

Я также склоняюсь к структурированию необязательных аргументов (когда не использую varargin ) примерно так:

function x = myfcn( arg1, opt_arg2 )
if nargin < 2
   arg2 = 'default';
else
   arg2 = opt_arg2;
end

так как я думаю, это делает более очевидным при редактировании файла, какие аргументы должны быть необязательными.

4
ответ дан 2 December 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: