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


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

文字コード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 — 変数の型に名前を付ける

履歴

バージョン記述
6.0

function replaces mc as overloading code for functions in Scilab language.

hm is no longer used for hypermatrix, as for matrices s is used instead.

Report an issue
<< macrovar Functions tree2code >>

Copyright (c) 2022-2023 (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:
Mon May 22 12:43:16 CEST 2023