Насколько я знаю, нет.
Например, если myObj.A
является двойным, myFunc будет просто передано значение, которое он содержит, и не будет никакой ссылки на объект. Если вы вызываете myFunc(somevariable)
, где somevariable
действительно является именем переменной, а не выражением, то вызов inputname(1)
внутри myFunc
даст вам строку 'somevariable', но так как вы ссылаетесь на свойство класса, это слишком сложно для MATLAB и inputname(1)
просто возвращает ''
(протестировано с MATLAB R2011a).
Обновление : зачем вам это знать? Если ваши интерфейсы спроектированы правильно, вам, вероятно, не придется делать такие вещи. Или вы пытаетесь обойти чей-то баг / плохой дизайн? В зависимости от вашего приложения вы можете подумать о каком-то очень грязном хакере, включающем dbstack
, пытаясь выяснить, какой m-файл вызвал вашу функцию, прочитать соответствующую строку кода из файла .m, проанализировать ее и затем получить доступ к объекту используя evalin('caller',...)
... но я сомневаюсь, что это хорошая идея; -).
Редактировать в ответ на предоставленный вами контекст:
Разве вы не можете просто переопределить свой обратный вызов Timer для передачи объекта "Автомобиль"? т.е.
set(yourtimer_handle,'TimerFcn',{@fetchTelem,vehicle_handle});
означает, что всякий раз, когда таймер обратного вызова вызывает функцию TelemCollector.fetchTelem (), он передает vehicle_handle в качестве третьего аргумента , как описано в документе . Это работает в сочетании с измененной функцией головы
function fetchTelem(obj, event, vehicle_handle)
где вы можете заменить event
на ~
в более новых версиях MATLAB, если вам это не нужно.
Может ли это сработать?