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.

 Akzeptierte Antwort

John D'Errico
John D'Errico am 19 Dez. 2014

1 Stimme

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 Kommentare

Zoltán Csáti
Zoltán Csáti am 19 Dez. 2014
Well, both answers were totally useful for me. Is there a chance to accept both of them? I just cannot decide between them.
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 am 19 Dez. 2014
You can give them both a vote at least!
Zoltán Csáti
Zoltán Csáti am 19 Dez. 2014
Well, John won it using the advice above. :)
Dang!
You should've used:
accept{1+floor(rand)}
Or set the random number generator to the year, that would at least be fair...
rng(2014)
1+round(rand)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Matt J
Matt J am 19 Dez. 2014

2 Stimmen

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Sean de Wolski
Sean de Wolski am 19 Dez. 2014
Bearbeitet: Sean de Wolski am 19 Dez. 2014

1 Stimme

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

Kategorien

Mehr zu Get Started with MATLAB finden Sie in Hilfe-Center und File Exchange

Produkte

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by