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.2. This page might be outdated.
See the recommended documentation of this function

Scilabヘルプ >> Functions > 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 Obsolete. Will be removed from Scilab 6. The code of the hypermat contents must be targeted instead.
ポインタ ptr ポインタ
セル ce ce
structure st st
有理数 r 有理数
線形状態空間 lss 状態空間
暗黙の多項式 ip size implicit 1:1:$

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

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

関数 :

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

//表示
            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 — 変数を表示
  • symbols — scilab 演算子の名前
  • typeof — explicit type or overloading code of an object
  • type — 変数の型を返す
  • typename — 変数の型に名前を付ける
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Feb 12 23:12:44 CET 2018