перегрузка
возможности перегрузки отображения, функций и операторов
Описание
В 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 | 
                |
| матрица целочисленных значений | 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 >> | 
