假设我有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
答案 0 :(得分:5)
据我所知,不。
例如,如果myObj.A
是一个double,myFunc将只传递它包含的值,并且不会引用该对象。如果您正在调用myFunc(somevariable)
,其中somevariable
实际上是变量的名称而不是表达式,那么在myFunc
内调用inputname(1)
将为您提供字符串'somevariable',但由于你指的是一个类的属性,这对于MATLAB来说太复杂了,inputname(1)
只返回''
(用MATLAB R2011a测试)。
更新:无论如何你为什么需要知道这个?如果你的界面设计干净,你可能不应该做这种事情。或者您是否正在尝试解决其他人的错误/糟糕的设计?根据您的应用程序,您可以想到涉及dbstack
的某种非常脏的黑客攻击,试图找出哪个m文件称为您的函数,从.m文件中读取相应的代码行,解析它然后访问使用evalin('caller',...)
的对象...但我怀疑这是个好主意; - )。
编辑以响应您提供的背景信息:
你不能只重新定义你的Timer回调来交出“Vehicle”对象吗?即
set(yourtimer_handle,'TimerFcn',{@fetchTelem,vehicle_handle});
表示每当回调计时器调用函数TelemCollector.fetchTelem()时,它都会将vehicle_handle作为第三个参数as described in the docu移交。这与改变的函数头一起使用
function fetchTelem(obj, event, vehicle_handle)
如果您不需要,可以在较新的MATLAB版本中用event
替换~
。
这可行吗?
答案 1 :(得分:2)
fetchTelem无法调用它没有引用的对象的方法。因此,无论如何,您需要为TelemCollector对象提供Vehicle句柄。
就个人而言,我认为Vehicle和TelemCollector之间的联系应该是相反的。我更喜欢看起来更像的东西:
V = Vehicle(PM, D);
TC = TelemCollector(V);
虽然这实际上取决于你期望如何使用这些类。
我同意@Jonas Heidelberg:如果这很困难,那么它可能是错误的界面。