Spec-Zone.ru › Octave 9

Далее: Обработка исключений и ошибок в файлах Oct, Предыдущее: Выделение локальной памяти в файлах Oct, Верх: Файлы Oct [Оглавление][Индекс]

A.1.11 Проверка входных параметров в файлах Oct ¶

Поскольку файлы oct — это компилированные функции, они открывают возможность аварийного завершения работы Octave из-за неосторожных вызовов функций или ошибок памяти. Очень важно, чтобы каждая функция имела достаточный уровень проверки параметров, чтобы обеспечить корректную работу Octave.

Минимальное требование, как обсуждалось ранее, — это проверка количества входных аргументов перед их использованием, чтобы избежать обращения к несуществующему аргументу. Однако в некоторых случаях этого может быть недостаточно, так как лежащий в основе код накладывает дополнительные ограничения. Например, внешний вызов функции может быть неопределён, если входные аргументы не являются целыми числами, или если один из аргументов равен нулю, или если вход является комплексным, а ожидалось вещественное значение. Поэтому файлы oct часто требуют дополнительной проверки входных параметров.

Существует несколько функций в Octave, которые могут быть полезны для проверки параметров. К ним относятся методы класса octave_value такие как is_real_matrix, is_numeric_type, и т.д. (см. ov.h). Часто, зная язык Octave m-файлов, можно догадаться о том, как будет выглядеть соответствующая функция на C++. Кроме того, существуют некоторые более специализированные функции проверки входных данных, некоторые из которых продемонстрированы ниже.

#include <octave/oct.h>

DEFUN_DLD (paramdemo, args, nargout, "Parameter Check Demo")
{
  if (args.length () != 1)
    print_usage ();

  NDArray m = args(0).array_value ();

  double min_val = -10.0;
  double max_val = 10.0;

  octave_stdout << "Properties of input array:\n";

  if (m.any_element_is_negative ())
    octave_stdout << "  includes negative values\n";

  if (m.any_element_is_inf_or_nan ())
    octave_stdout << "  includes Inf or NaN values\n";

  if (m.any_element_not_one_or_zero ())
    octave_stdout << "  includes other values than 1 and 0\n";

  if (m.all_elements_are_int_or_inf_or_nan ())
    octave_stdout << "  includes only int, Inf or NaN values\n";

  if (m.all_integers (min_val, max_val))
    octave_stdout << "  includes only integers in [-10,10]\n";

  return octave_value_list ();
}

Пример его использования:

paramdemo ([1, 2, NaN, Inf])
⇒ Properties of input array:
     includes Inf or NaN values
     includes other values than 1 and 0
     includes only int, Inf or NaN values

Далее: Обработка исключений и ошибок в файлах Oct, Предыдущее: Выделение локальной памяти в файлах Oct, Верх: Файлы Oct [Оглавление][Индекс]

© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.2.0/Input-Parameter-Checking-in-Oct_002dFiles.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API