2016-09-30 2 views
2

Я хотел бы иметь класс, который в своем конструкторе может иметь знание (извлечение как строку) своего имени экземпляра.Класс Matlab со знанием имени экземпляра в конструкторе

На данный момент я работал экстракцию имени вот так:

classdef mysession 

methods (Access = public) 

    function this=mysession (varargin) 
    this.cargs=varargin; 
    this.built=false; 
    end 

    function id=build(this) 
    id=this.mynameis; 
    this.id = id; 
    %% instructions needing id 
    built=true; 
    end 

    function name = mynameis (this) 
    name=evalin ('caller', 'inputname'); 
    end 
end 

properties (Access=private) 
    id 
    built 
    cargs 
end 
end 

который требует уродливого синтаксиса

A = mysession; A.build 

для того, чтобы работать ...

+0

Зачем вам это нужно. Поскольку класс 'handle' передается по ссылке, вы можете технически иметь * две переменные *, которые указывают на * тот же * объект, поэтому он имеет * два * имена – Suever

+0

извините, я просто скопировал код, который мне был предоставлен, и это это мой первый класс Matlab. вывод из дескриптора будет неправильным - экземпляры также должны быть неготовными, поскольку они действительно ссылаются на внешнюю базу данных объектов (таким образом, потребность в уникальном идентификаторе). – Davide

+0

МЫ, скорее всего, дадим вам лучший ответ, если вы опишете, что вы на самом деле пытаетесь выполнить. – Suever

ответ

1

Там нет никакого способа чтобы получить имя переменной, которое используется для назначения вывода функции или конструктора класса. Как вы обнаружили, единственный способ получить имя переменной объекта в рабочей области вызова - вызвать другой метод класса, с которого вы можете использовать inputname для запроса.

Это в стороне, непонятно, зачем вам это нужно, но я бы сильно отговорил его. В частности, с классами handle, вы можете иметь несколько переменных, указывающих на то же объект, поэтому объект технически имеет несколько имен.

+0

вывод ' Davide