How to return the name (identifier) of the object from the call, inside a method of that class
    6 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Here is a simple example:
classdef simpleClassA
      properties
          prop1
      end
      methods
          function obj = simpleClassA(x)
              obj.prop1 = x;
              objName = whatsMyName?
              fprintf('Property prop1 of %s = %g', objName, x)
          end
      end
   end
Then, at the command prompt, I construct an object of simpleClassA by:
Gold = simpleClassA(3.0);
and I expect this to display:
"Property prop1 of Gold = 3.0"
What function is "whatsMyName?" in my constructor method that would give me this result?
When I searched the MATLAB Answers database, the closest thing to what I want is these two links below but not exactly:
0 Commenti
Risposta accettata
  Walter Roberson
      
      
 il 15 Dic 2017
        You need the techniques described in https://www.mathworks.com/matlabcentral/answers/16693-within-a-function-get-complete-command-line-calling-text-a-la-dbstack to get the text of the executing command, and then parse it to find the variable name.
Keep in mind, though, that it is legal to have multiple statements on the same line:
   set(Gold, 'prop1', 3.0); set(Silver, 'prop1', 3.0);
You might find it difficult to figure out which of the two set() you are executing.
3 Commenti
  Walter Roberson
      
      
 il 18 Dic 2017
				For objects that already exist, it turns out to be easier than I thought. See https://www.mathworks.com/matlabcentral/answers/130695-how-can-i-return-a-char-of-object-variable-name-from-a-method#answer_137878
I thought I had experimented with that and had it fail.
The difficulty with that approach is that you are trying to do this in a constructor rather than in a method after the object already exists. Your original version of the question was related to a set method(), in which case the object already exists; your edit has it happen in the constructor, and since the object does not exist yet you have to use techniques that figure out which line of code is executing and retrieve the source code of that line and figure out where you are on the source line (since there might be multiple calls to the same constructor.)
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Argument Definitions 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!