Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
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)
.
文字コード6
を
x.b(2)=33
のような複雑な挿入アルゴリズム
で使用することができます.
ただし,b
フィールドは構造体x
で
定義されません.
挿入は自動的にtemp=x.b;
temp(2)=33;
x.b=temp
に分解されます.
文字コード6
がこのアルゴリズムの最初の手順で
使用されます.オーバーロード関数6
は,
e
のものに非常によく似ています.
- 関数 :
いくつかの基本プリミティブ関数
新規データ型に関してオーバーロードができます. 特定のデータ型に関してこのような関数が未定義の場合, 関数
%<type_of_an_argument>_<function_name>
がコールされます. ユーザはこのコールされた関数に入力データ型に関する 定義を追加することができます.
例
参照
<< Overloading | Overloading | Functions >> |