11.10.5 オーバーロードとオートロード
関数は、異なる入力引数で動作するようにオーバーロードできます。たとえば、演算子 '+' は、Octave では、single、double、uint8、int32、およびその他の多くの引数で動作するようにオーバーロードされています。関数をオーバーロードするための推奨される方法は、クラスとオブジェクト指向プログラミングを使用することです (関数のオーバーロードを参照)。ただし、場合によっては、ユーザーオーバーロードを取り消して、特定の型に関連付けられたデフォルトの関数を呼び出す必要があります。builtinこの目的のために関数が存在します。
: […] = builtin (f, …)
指定された型シグネチャに対して f が別の関数にオーバーロードされている場合でも、基本関数fを呼び出します。
これは通常、オブジェクト指向プログラミングを行うときに役立ち、新しいクラスのオーバーロードされた関数ではなく、Octave の基本関数の 1 つを呼び出す必要があります。
sin (0)
⇒ 0
function y = sin (x), y = cos (x); endfunction
sin (0)
⇒ 1
builtin ("sin", 0)
⇒ 0
1 つの動的リンク ファイルで複数の関数が定義される場合があります。ただし、Octave は関数ファイル名に基づいて関数を検索するため、動的リンク ファイル内の各関数を見つける方法が必要です。シンボリック リンクをサポートするオペレーティング システムでは、元のファイルに含まれる各関数に対して、元のファイルへのシンボリック リンクを作成できます。
ただし、シンボリック リンクをサポートしていないよく知られたオペレーティング システムが少なくとも 1 つあります。関数ごとに元のファイルのコピーを作成すると、Octave が使用するディスク領域が増加するため、望ましくありません。代わりに、Octave は autoload、特定の関数がどのファイルにあるかをユーザーが定義できる関数を提供します。
: autoload_map = autoload ()
: autoload (function, file)
: autoload (…, "remove")
ファイルから自動ロードする関数を定義します。
2 番目の引数file は、絶対ファイル名、または autoload コマンドが実行された関数またはスクリプトと同じディレクトリ内のファイル名である必要があります。file は Octave ロード パスに依存して はなりません。
通常、呼び出しは、autoloadOctaveのロードパスにディレクトリが追加された際に評価されるPKG_ADDスクリプトファイル内に表示されます。ファイル内にディレクトリ名をハードコードするのを避けるために、ファイルがPKG_ADDスクリプトと同じディレクトリにある 場合は、
autoload ("foo", "bar.oct");
fooはファイルから関数をロードします。同じディレクトリにない bar.oct場合の上記の使用方法、または次のような使用法bar.oct
autoload ("foo", file_in_loadpath ("bar.oct"))
動作が予測できない可能性があるため、強くお勧めしません。
引数がない場合、現在の自動ロード マップを含む構造体を返します。
3 番目の引数"remove"が指定された場合、関数はクリアされ、現在の Octave セッション中にロードされなくなります。
See also: PKG_ADD.