I started learning OOP in MATLAB and I saw that we can either use the colon(A,B) syntax or simply A:B. This kind of method works for other operators and we may even redefine how they work.
My question is: can we somehow achieve that MATLAB recognises some other symbols we define? For example, I want to use ° for dyadic product in my class and if I typed A°B, dyadic(A,B) would be executed on objects A and B.

 採用された回答

John D'Errico
John D'Errico 2014 年 12 月 19 日

1 投票

As you have seen, you can define the behavior of existing operators, like + or * to operate as you would like them to behave for objects of your class. I use that capability heavily in several of my toolboxes.
But no, you cannot define a completely new character and have MATLAB recognize that as an operator. So you cannot define the operator $ or ° to do something special for your class. This may change one day - one can never rule out language design changes.

6 件のコメント

Zoltán Csáti
Zoltán Csáti 2014 年 12 月 19 日
Well, both answers were totally useful for me. Is there a chance to accept both of them? I just cannot decide between them.
John D'Errico
John D'Errico 2014 年 12 月 19 日
Just flip a coin. :) Better yet, use MATLAB!
accept = {'Sean', 'John'};
accept{1 + round(rand(1))}
Drat. I tried it a few times, but it can't make up its mind!
Sean de Wolski
Sean de Wolski 2014 年 12 月 19 日
You can give them both a vote at least!
Zoltán Csáti
Zoltán Csáti 2014 年 12 月 19 日
Well, John won it using the advice above. :)
Sean de Wolski
Sean de Wolski 2014 年 12 月 19 日
Dang!
You should've used:
accept{1+floor(rand)}
Sean de Wolski
Sean de Wolski 2014 年 12 月 19 日
Or set the random number generator to the year, that would at least be fair...
rng(2014)
1+round(rand)

サインインしてコメントする。

その他の回答 (2 件)

Matt J
Matt J 2014 年 12 月 19 日

2 投票

There are fake things you can do. I don't really recommend them, but just for fun, I create a function below that makes the '$' symbol act like the '+' symbol,
>> A=1;B=2;
>> Q C=A$B
>> ans=C
ans =
3
function Q(varargin)
cmd=[varargin{:} ';'];
cmd=strrep(cmd,'$','+');
evalin('caller',cmd)

2 件のコメント

Sean de Wolski
Sean de Wolski 2014 年 12 月 19 日
Ughh that hurts...
Matt J
Matt J 2014 年 12 月 20 日
Yeah, just an illustration of some of the horrible things you can do.

サインインしてコメントする。

Sean de Wolski
Sean de Wolski 2014 年 12 月 19 日
編集済み: Sean de Wolski 2014 年 12 月 19 日

1 投票

No, you can only overload the current operators. I think this is pretty close to the full list
le,lt,gt,ge,eq,ne,colon,end,times,mtimes,ldivide
rdivide,mrdivide,mldivide,power,mpower,subsref,subsindex,subsasgn

カテゴリ

ヘルプ センター および File ExchangeGet Started with MATLAB についてさらに検索

製品

タグ

質問済み:

2014 年 12 月 19 日

コメント済み:

2014 年 12 月 20 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by