перегрузка возможности перегрузки отображения, функций и операторов Описание В Scilab'е вывод на экран переменной, функции и операторы могут быть определены для новых объектов с помощью функций (в Scilab-коде или примитивов). Вывод на экран Вывод на экран новых объектов, определённых с помощью структуры типизированного списка tlist, может быть перегружен (по умолчанию вывод на экран схож с выводом на экран списка list). Функция перегрузки не должна иметь выходных аргументов, но должна иметь один входной аргумент. Её имя формируется следующим образом: %<тип_tlist>_p, где %<тип_tlist> указывает на первый вход компонента типа tlist, усечённого до первых 9-ти символов. Операторы Каждый оператор, который не определён для типов указанных операндов, может быть определён. Функция перегрузки должна иметь один выходной аргумент и один или два входных в соответствии с количеством операндов. Имя функции формируется следующим образом: для бинарных операторов: %<тип_первого_операнда>_<код_оператора>_<тип_второго_операнда>; для унарных операторов: %<operand_type>_<код_оператора>; операторы выделения и вставки, которые являются n-арными операторами, описаны ниже. Будьте осторожны. В макросе перегрузки можно использовать только те типы, которые зарегистрированы функцией typename. <operand_type>, <тип_первого_операнда>, <тип_второго_операнда> являются последовательностями символов, связанных с каждым типом данных как это описано в следующей таблице: тип данных символьный код typeof комментарии матрица чисел удвоенной точности s constant матрица полиномов p polynomial матрица логических значений b boolean разрежённая матрица sp sparse разрежённая матрица логических значений spb boolean sparse разрежённая матрица Matlab'а msp Matlab sparse матрица целочисленных значений i int8, int16, int32, uint8, uint16, uint32 матрица строк c string дескриптор h handle компилированная функция fptr fptr сценарий, функция mc function библиотека f library список l list типизированный список tlist type tlist type первая строка первого элемента типизированного списка матричноориентированный список mlist type mlist type первая строка первого элемента матричноориентированного списка гиперматрица hm hypermat указатель ptr pointer cell-массив ce ce структура st st рациональное значение r rational линейное пространство состояний lss state-space неявный полином ip size implicit 1:1:$ <код_оператора> - это одиночный символ, связанный с каждым оператором, как описано в следующей таблице: оператор символьный код ' t + a - s * m / r \ l ^ p .* x ./ d .\ q .*. k ./. y .\. z : b *. u /. v \. w [a,b] c [a;b] f () выделение e () вставка i == o <> n | g & h .^ j .' 0 < 1 > 2 <= 3 >= 4 ~ 5 iext 6 Функция перегрузки для синтаксиса выделения b= a(i1, ..., in) имеет следующую последовательность вызова: b = %<тип_a>;_e_(i1, ..., in, a) и синтаксис [x1, .., xm] = a(i1, ..., in) имеет следующую последовательность вызова: [x1, .., xm] = %<тип_a>;_e_(i1, ..., in, a). Функция перегрузки, связанная с синтаксисом вставки a(i1, ..., in) = b имеет следующую последовательность вызова: a = %<тип_b>;_i_<тип_a>;(i1, ..., in, b, a). Символьный код 6 может использоваться в некоторых сложных алгоритмах вставки, таких как x.b(2) = 33, где поле b не определено в структуре x. Вставка автоматически разлагается на temp = x.b; temp(2) = 33; x.b = temp. Символьный код 6 используется для первого шага этого алгоритма. Функция перегрузки 6 очень похожа на функцию перегрузки e. Функции: Некоторые основные функции-примитивы могут быть также перегружены для новых типов данных. Когда такая функция не определена для особого типа данных, то вызывается функция %<тип_аргумента>_<имя_функции>. Пользователь может добавить в этой вызываемой функции определение, связанное с типами входных данных. Примеры //ВЫВОД НА ЭКРАН var = tlist('tab', ['a', 'b'], ['x'; 'y'], rand(2, 2)) // у переменной var тип 'tab' typeof(var) function [] = %tab_p(l) disp([[' '; l(3)] [l(2); string(l(4))]]) endfunction var // после перегрузки //ОПЕРАТОР 's' + 1 // нельзя прибавить число к строке function x = %c_a_s(a, b) x = a + string(b); endfunction 's' + 1 // после перегрузки //ФУНКЦИЯ sin('2 * x') // sin не работает со строкой function x = %c_sin(a) x = 'sin(' + a + ')' endfunction sin('2 * x') // после перегрузки Смотрите также tlist disp symbols typeof type typename