2012-01-05 8 views
6

コロン ":"を関数の引数として使用できるかどうかを知りたいと思います。そのようなmatlabで関数の引数としてコロンを渡す

何か:

function y=func(x) 
    if x is a colon 
    do this 
    else 
    do that 
    end 

は、関数の引数として、ワーク鍵をを通過することが可能であり、また1:端3:エンド5など... 私はそれが可能だとは思っていませんが、私は確信しています。

また、関数の引数として "1:end"を渡すと、エラーは発生しませんが、関数内では引数が割り当てられません(他の引数でさえも)。誰か何が起こるか知っていますか?

+1

実際にこれを行う必要があるかどうかはわかりません。何を達成しようとしているのかをもう少し教えてください。あなたは確かにコロンを文字列 'もしx =="として渡すことができます: "..."、** end **は[size]を使って見つけることができます(http://www.mathworks.co.uk/help/techdoc /ref/size.html)、番号として渡されます。 – oleksii

+0

はい、それを文字列として渡すとよい回避策になります....良いアイデア。 – Oli

+3

これは、オーバーロードされた演算子 '()'の呼び出しの中で起こります。 'x(:)'を呼び出すと、 ':'はsubsrefまたはsubsasgnに文字列 '':''として入ります。それは妥当と思われる。 '=='の代わりに 'ischar(x)&& isequal(x、 ':')'を使用してください。 '=='はサイズの違いにエラーを投げ、偽陽性を生成します: '=='は暗黙の型変換を行います。したがって '58 == ':''は真です。 –

答えて

6

自分のクラスの両方を上書きすることができます。

classdef MyClass 

properties(Access=public) 
    data 
end 

methods 
    function out = end(A,k,n) 
     disp(A); 
     disp(k); 
     disp(n); 
     out = []; 
    end 

    function B = subsref(A,S)    
     disp(S); 
     B = []; 
    end 
end 
end 

機能として、私はこのような機能のことを聞いたことはありません。

0

いいえ、コロンを引数として渡すことはできません(意味がありません)。

+1

可能ならば、私はそれが望む感覚を与えることができました。それは "引数演算子"のいくつかの種類のオーバーロードになります。 – Oli

関連する問題