x.abs()?

18 visualizzazioni (ultimi 30 giorni)
Shunchao Wu
Shunchao Wu il 11 Nov 2011
>> x=-1;
>> x.abs()
??? Attempt to reference field of non-structure array.
Why?
Notice that Matlab Help says "All MATLAB data types are implemented as object-oriented classes."

Risposta accettata

Fangjun Jiang
Fangjun Jiang il 11 Nov 2011
That is true, but it doesn't imply that x you declared will have abs as its method.
I think that claim you quoted means that MATLAB's data types are internally implemented as object-oriented classes. The double data type doesn't provide any method.
  1. class(x) returns double
  2. methodsview(x) causes an error.
  5 Commenti
Shunchao Wu
Shunchao Wu il 19 Nov 2011
I'd like to consider double as one fundmental data type, not the so called "class", and x as a normal variable, not an object. With regard to class(x), methods(x), methodsview(x) and isobject(x), I regard them as some games.
Shunchao Wu
Shunchao Wu il 19 Nov 2011
Thank you all:)

Accedi per commentare.

Più risposte (2)

Daniel Shub
Daniel Shub il 11 Nov 2011
I disagrees with both answers. Starting with
x = -1;
You can see that abs is a method with
methods(x)
metaclass(x)
methodsview(class(x))
Interesting, as Fangjun mentioned,
methodsview(x)
gives an error. Exploring the double class in general
?double
methodsview double
both list abs as a method.
Finally, creating a simply dummy class
classdef myClass < double
methods
function newClass = myClass(input)
newClass = newClass@double(input);
end
end
end
makes it so that
y = myClass(-1);
y.abs()
works.
  1 Commento
Fangjun Jiang
Fangjun Jiang il 11 Nov 2011
+1. Interesting finding! I guess TMW has some inconsistency problem needs to be sorted out.

Accedi per commentare.


Drew Weymouth
Drew Weymouth il 11 Nov 2011
Although your variable x is technically a MATLAB "class" ( double ), it does not have any methods associated with it. While MATLAB does have some built-in classes with methods (such as Audioplayer for example), most data types are basically primitive values. To get the absolute value of any scalar value, use y = abs(x). If x is a matrix, then this will take the absolute value of each component. If x is complex, then it will give the magnitude.

Categorie

Scopri di più su Data Type Identification in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by