Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.0.0 - Русский


перегрузка

возможности перегрузки отображения, функций и операторов

Описание

В 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.

Функции:

Некоторые основные функции-примитивы могут быть также перегружены для новых типов данных. Когда такая функция не определена для особого типа данных, то вызывается функция %<тип_аргумента>_<имя_функции>. Пользователь может добавить в этой вызываемой функции определение, связанное с типами входных данных.

Примеры

//ВЫВОД НА ЭКРАН
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 — объект Scilab'а и определение типизированного списка
  • disp — displays variables
  • symbols — названия операторов Scilab'a
  • typeof — explicit type or overloading code of an object
  • type — возвращает тип переменной
  • typename — связывает имя и тип переменной

История

ВерсияОписание
6.0

function replaces mc as overloading code for functions in Scilab language.

hm is no longer used for hypermatrix, as for matrices s is used instead.

Report an issue
<< macrovar Функции tree2code >>

Copyright (c) 2022-2023 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Mar 07 09:29:07 CET 2023