перегрузка
возможности перегрузки отображения, функций и операторов
Описание
В 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 | |
| function | function | function | |
| библиотека | f | library | |
| список | l | list | |
| типизированный список | tlist type | tlist type | первая строка первого элемента типизированного списка | 
| матричноориентированный список | mlist type | mlist type | первая строка первого элемента матричноориентированного списка | 
| указатель | ptr | pointer | |
| cell-массив | ce | ce | |
| структура | st | st | |
| рациональное значение | r | rational | |
| линейное пространство состояний | lss | state-space | |
| неявный список | ip | implicitlist | 1:1:$ | 
| undefined|null object | 0 | listdelete, void | see null(), list() | 
<код_оператора> - это одиночный
            символ, связанный с каждым оператором, как описано в
            следующей таблице:
| оператор | символьный код | 
| ' | 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.
- Функции:
- Некоторые основные функции-примитивы могут быть также перегружены для новых типов данных. Когда такая функция не определена для особого типа данных, то вызывается функция - %<тип_аргумента>_<имя_функции>. Пользователь может добавить в этой вызываемой функции определение, связанное с типами входных данных.
Примеры
//ОПЕРАТОР 's' + 1 // нельзя прибавить число к строке function x=%c_a_s(a, b) x = a + string(b); endfunction 's' + 1 // после перегрузки
Смотрите также
История
| Версия | Описание | 
| 6.0 | 
 
 | 
| Report an issue | ||
| << macrovar | Функции | tree2code >> |