Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
5.3.0 - 日本語

Change language to:
English - Français - Português

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

Scilab manual >> Overloading > overloading

overloading

表示,関数および演算子オーバーロード機能

説明

Scilabにおいては, 変数表示, 関数および演算子は 関数(Scilabコードまたはプリミティブ)により新規オブジェクト用に 定義することができます.

表示

tlistにより定義される 新規オブジェクトの表示は, オーバーロードすることができます (デフォルトの表示はlistの出力に似ています). オーバーロード関数は入力引数を1つとし,出力引数を持たない必要があります. その関数の名前は,%<tlist_type>_pのように 作成します. ただし, %<tlist_type> は, tlist型の要素の最初のエントリを 最初の9文字に丸めたものを意味します.

演算子

指定したオペランド型について定義されていない各演算子を 定義することができます. オーバーロード関数は入力引数を1つ,オペランドの数に基づき 1個または2個の入力を有する必要があります. 関数名は以下のように作成されます:

2項演算子の場合: %<first_operand_type>_<op_code>_<second_operand_type>

単項演算子の場合: %<operand_type>_<op_code>

n項演算子の展開および挿入は以下のように記述されます.

typename関数に登録された型のみが オーバーロードマクロの中で使用できることに注意してください.

<operand_type>, <first_operand_type>, <second_operand_type> は, 以下のテーブルに記述された各データ型に関連する 文字の並びです:

データ型 文字コード typeof コメント
double行列 s 定数
多項式行列 p 多項式
論理値行列 b 論理値
疎行列 sp 疎行列
論理値疎行列 spb 論理値疎行列
Matlab 疎行列 msp Matlab疎行列
整数行列 i int8, int16,int32, uint8, uint16, uint32
文字列行列 c 文字列
ハンドル h ハンドル
コンパイルされた関数 fptr fptr
スクリプト関数 mc 関数
ライブラリ l ライブラリ
リスト l リスト
tlist tlist型 tlist型 最初のtlistエントリの最初の文字列
mlist mlist型 mlist型 最初のmlistエントリの最初の文字列
ハイパー行列 hm hypermat
ポインタ ptr ポインタ
セル ce ce
structure st st
有理数 r 有理数
線形状態空間 lss 状態空間
暗黙の多項式 ip size implicit 1:$

<op_code> は, 以下のテーブルに記述された 各演算子に関連する文字です:

op 文字コード op 文字コード
' 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
~ 5 .' 0
< 1 > 2
<= 3 >= 4
iext 6

展開構文b=a(i1,...,in)の オーバーロード関数は, 以下のような呼び出し手順となります: b=%<type_of_a>_e_(i1,...,in,a)

そして,構文 [x1,..,xm]=a(i1,...,in) は 以下のような呼び出し手順となります: [x1,..,xm]=%<type_of_a>_e_(i1,...,in,a)

挿入構文に関するオーバーロード関数 a(i1,...,in)=b は以下のような呼び出し手順となります: a=%<type_of_b>_i_<type_of_a>(i1,...,in,b,a).

文字コード6x.b(2)=33のような複雑な挿入アルゴリズム で使用することができます. ただし,bフィールドは構造体xで 定義されません. 挿入は自動的にtemp=x.b; temp(2)=33; x.b=tempに分解されます. 文字コード6 がこのアルゴリズムの最初の手順で 使用されます.オーバーロード関数6 は, eのものに非常によく似ています.

関数 :

いくつかの基本プリミティブ関数

新規データ型に関してオーバーロードができます. 特定のデータ型に関してこのような関数が未定義の場合, 関数%<type_of_an_argument>_<function_name> がコールされます. ユーザはこのコールされた関数に入力データ型に関する 定義を追加することができます.

//表示
deff('[]=%tab_p(l)','disp([['' '';l(3)] [l(2);string(l(4))]])')
tlist('tab',['a','b'],['x';'y'],rand(2,2))

//演算子
deff('x=%c_a_s(a,b)','x=a+string(b)')
's'+1

//関数
deff('x=%c_sin(a)','x=''sin(''+a+'')''')
sin('2*x')
<< Overloading Overloading Functions >>

Copyright (c) 2022-2024 (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:
Wed Jan 26 16:25:14 CET 2011