Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -

Please note that the recommended version of Scilab is 6.0.0. This page might be outdated.
See the recommended documentation of this function

Справка Scilab >> Функции > перегрузка

перегрузка

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

Описание

В 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 — объект Scilab'а и определение типизированного списка
  • disp — displays variables
  • symbols — названия операторов Scilab'a
  • typeof — указывает тип объекта
  • type — возвращает тип переменной
  • typename — связывает имя и тип переменной
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 14:01:18 CEST 2014