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 | |
| スクリプト関数 | function | 関数 | |
| ライブラリ | l | ライブラリ | |
| リスト | l | リスト | |
| tlist | tlist型 | tlist型 | 最初のtlistエントリの最初の文字列 | 
| mlist | mlist型 | mlist型 | 最初のmlistエントリの最初の文字列 | 
| ポインタ | ptr | ポインタ | |
| セル | ce | ce | |
| structure | st | st | |
| 有理数 | r | 有理数 | |
| 線形状態空間 | lss | 状態空間 | |
| 暗黙のリスト | ip | implicitlist | 1:1:$ | 
| undefined|null object | 0 | listdelete, void | see null(), list() | 
<op_code> は, 以下のテーブルに記述された
            各演算子に関連する文字です:
| op | char code | 
| ' | t | 
| + | a | 
| - | s | 
| * | m | 
| / | r | 
| \ | l | 
| ^ | p | 
| .* | x | 
| ./ | d | 
| .\ | q | 
| .*. | k | 
| ./. | y | 
| .\. | z | 
| : | b | 
| *. | u | 
| /. | v | 
| \. | w | 
| [a,b] | c | 
| [a;b] | f | 
| () extraction | e | 
| () insertion | i | 
| == | o | 
| <> | n | 
| | | g | 
| & | h | 
| .^ | j | 
| .' | 0 | 
| < | 1 | 
| > | 2 | 
| <= | 3 | 
| >= | 4 | 
| ~ | 5 | 
| 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>がコールされます. ユーザはこのコールされた関数に入力データ型に関する 定義を追加することができます.
例
//演算子 's' + 1 // 数値は文字列に加算できません function x=%c_a_s(a, b) x = a + string(b); endfunction 's' + 1 // オーバーローディング後
参照
履歴
| バージョン | 記述 | 
| 6.0 | 
 
 | 
| Report an issue | ||
| << macrovar | Functions | tree2code >> |