假设我有一个myClass < handle属性A.如果我创建一个实例myClass,比如说myObj,并传递myObj.A给一个函数,比如说function myFunc(val),是否可以在内部myFunc看到val传递给它的属性是myObj?
编辑:对于上下文:
我正在编写一个API(在某种意义上)与我的研究实验室的Arduino硬件接口.首要类被称为Vehicle与性能PinManager < handle,TelemCollector < handle以及各种Device < handle秒.它还有方法来做像runMotor(),getAltitude()等等.我有一个方法TelemCollector.telemFetch(),它是一个定时器事件的回调; 我希望TelemCollector.telemFetch()能够访问Vehicle方法(即getAltitude()); 天真的我只会做Vehicle一个TelemCollector访问这些方法的属性.我希望不必这样做.
EDIT2:我正在尝试完成的示例代码片段:
classdef Vehicle < handle
properties
PinManager
TelemCollector
Devices
end
methods
function obj = Vehicle(PM, TC, D)
obj.TC = TelemCollector();
obj.PM = PinManager();
obj.Devices = D();
end
function val = getAltitude(obj)
%# read altitude from a connected Device
end
function val = getSpeed(obj)
%# read speed from connected Device
end
end
end
classdef TelemCollector < handle
properties
%# ...
end
methods
function fetchTelem(obj)
%# do getAltitude(), getSpeed(), etc, here.. but I want to access
%# Vehicle.getAltitude() and Vehicle.getSpeed() somehow!
end
end
end
Run Code Online (Sandbox Code Playgroud)
据我所知,没有.
例如,如果myObj.A是double,myFunc将只传递它包含的值,并且不会引用该对象.如果你打电话myFunc(somevariable)那里somevariable真的是一个变量的名称,而不是一个表达式,然后调用inputname(1)里面myFunc会给你字符串"somevariable",但因为你是指一类的属性,这是MATLAB和过于复杂inputname(1)只返回''(使用MATLAB R2011a测试).
更新:为什么你还需要知道这个?如果你的界面设计干净,你可能不应该做这种事情.或者您是否正在尝试解决其他人的错误/糟糕的设计?根据您的应用程序,您可以想到某种非常脏的黑客涉及dbstack,试图找出哪个m文件称为您的函数,从.m文件中读取适当的代码行,解析它然后使用evalin('caller',...).. 访问该对象.但我怀疑这是个好主意;-).
根据您提供的上下文进行编辑:
难道你不能重新定义你的Timer回调来交出"Vehicle"对象吗?即
set(yourtimer_handle,'TimerFcn',{@fetchTelem,vehicle_handle});
Run Code Online (Sandbox Code Playgroud)
意味着每当回调计时器调用函数TelemCollector.fetchTelem()时,它就会将vehicle_handle作为第三个参数移交,如文档中所述.这与改变的功能头一起使用
function fetchTelem(obj, event, vehicle_handle)
Run Code Online (Sandbox Code Playgroud)
在这里您可以取代event由~较新版本的MATLAB如果你不需要它.
这可行吗?