@
オペレータは、2つ(多分)異なったtypes of handlesを作成することができます:単純で匿名です。単純な関数ハンドルは、関数ファイルを直接参照し、in-directionの他のレベルを持たないハンドルです。無名関数は、それ自体が(非常に単純な)関数であり、一定の格納、クロージャー、およびその他の目的のための独自の作業領域を持つハンドルです。違いはfunctions
機能を使用して見ることができます。
>> f1 = @example1
f1 =
@example1
>> f2 = @(t,x) example1(t,x)
f2 =
@(t,x)example1(t,x)
>> functions(f1)
ans =
function: 'example1'
type: 'simple'
file: 'C:\Development\example1.m'
>> functions(f2)
ans =
function: '@(t,x)example1(t,x)'
type: 'anonymous'
file: ''
workspace: {[1x1 struct]}
within_file_path: '__base_function'
無名関数が原因彼らは単に関数へのポインタとあなたがparameterizing functionsしている場合にのみので、本当に必要とされているよりも多くあることにオーバーヘッドのビットを追加します。
かかわらず、創造の
、ode45
とその親族は常にfeval
を経由して、あなたがそれを渡すハンドルにt
とy
引数のペアを渡そうとするだろう、とあなたは、直接ファイルハンドルに対する無名関数を使用している場合、引数リストがのみ必要です参照。
明白なのは、 '@ '演算子が関数ハンドルの演算子であり、匿名関数ではないということです。 'f = @(x、y)x + y;と同様の無名関数を書くとき、これは実際には関数f(x、y)= x + yを作成し、それを関数ハンドルfに付けることを意味する。これとは別に、素晴らしい答え! +1。 – patrik
@patrikそれは公正な点です。私はしばしば怠け者になり、文脈を区別せず、単なる特殊な演算子と考えるだけです。 – TroyHaskin