hasdrubal
hasdrubal

Reputation: 1138

Import class to access constant values

I defined a class in one of my many MATLAB packages. To my suprise, I could not access a constant property of my class without importing the class definition. Even if it is a method of the class itself. Like so:

classdef TestClass

    properties( Constant )

        c=0;
    end

    methods

        function obj = TestClass()        
        end

        function getC(obj)

            import test.TestClass;
            disp(TestClass.c);
        end
    end    
end

I just want to check whether I am doing something wrong here or is this the correct way to use constants in MATLAB.

Upvotes: 1

Views: 168

Answers (1)

Jared
Jared

Reputation: 71

Since you have placed TestClass inside a package Matlab needs to know where to look to find the definition for this class, even if it's a reference from within the class or function. An alternate to the above code could be:

    function getC(obj)
        disp(test.TestClass.c);
    end

Alternately, if within a class, constant values can be accessed from the object itself.

    function getC(obj)
        disp(obj.c);
    end

If neither of these is working for you, you may need to refresh the classdef for TestClass from memory. This will cause matlab to reload the constant value, which is pulled into Matlab when it first parses the classdef file to determine the structure of the class. This can be done using clear classes, however a warning that it will also clear all other classes, variables, and any breakpoints you have set.

If you want to see if this is necessary you can view the metaclass object to determine what Matlab "thinks" your class structure should be. You can do this using the following.

mc = ?test.TestClass;
mc.PropertyList

You may need to index into the property list to find the specific property you are interested in, but the thing you are looking for are the following fields.

  • Name: 'c'
  • Constant: 1
  • DefaultValue: 0

Upvotes: 1

Related Questions