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