Matlab 中的相关可观测属性。有效吗?

2024-01-25

在 Matlab 类中,声明在语法上似乎是正确的property那是依赖者(计算未存储)和可观察的在同一时间。考虑代码

properties (Access = private)
    instanceOfAnotherClass
end
properties (SetAccess = private, Dependent, SetObservable)
    propertyTwo
end
methods
    function val = get.propertyTwo(this)
        val = this.instanceOfAnotherClass.propertyOne;   
    end
end

这是否按预期工作?也就是说,如果财产propertyOne存储在的对象的instanceOfAnotherClass已更改 是否触发了属性更改事件propertyTwo?注意propertyOne is not 可观察的.

Edit:它不起作用(如我所料)。未触发“PostSet”事件。那么遇到这种情况我该如何处理呢?那么有没有更好的解决方案来创建propertyTwo作为一个非依赖者并在每次“propertyOne”更改时将其设置为与“propertyOne”相同的值?

Edit2:作为反应Amro's https://stackoverflow.com/users/97160/amro 编辑他的答案 https://stackoverflow.com/a/11653138/311865我将解释更复杂的情况。 考虑这两个类:

 classdef AClass < handle
     properties
         a
     end
 end
 classdef BClass < handle
     properties (Access = private)
         aClassInst
     end
     properties (Dependent, SetObservable, SetAccess = private)
         b
     end
     methods
         function this = BClass(aClass)
             this.aClassInst = aClass;
         end
         function val = get.b(this)
             val = this.aClassInst.a;
         end
     end
 end

使用所有这些代码的类不应访问AClass。它仅与实例交互BClass并想听听财产的变化b。但是如果我创造财产a of AClassobservable 并不能解决我的问题,不是吗? “PostSet”事件不会传播到属性b,是吗?


它在语法上可能是正确的,但侦听器回调永远不会执行。例子:

classdef MyClass < handle
    properties (Access = public)
        a
    end
    properties (SetAccess = private, Dependent, SetObservable)
        b
    end
    methods
        function val = get.b(this)
            val = this.a;
        end
    end
end

Now try:

c = MyClass();
lh = addlistener(c, 'b', 'PostSet',@(o,e)disp(e.EventName));
c.a = 1;
disp(c.b)

正如您所看到的,“PostSet”回调从未执行。


EDIT

在我看来,SetObservable确实应该设置为a not b。这是因为b是只读的并且只能在以下情况下更改a变化。现在PostSet事件会通知我们两个属性都已更改。

使用我上面使用的相同示例,只需移动SetObservable from b to a。当然,现在您可以按照以下方式收听该事件:

lh = addlistener(c, 'a', 'PostSet',@(o,e)disp(e.EventName));

EDIT#2

抱歉,我没有注意到您有复合的事实(类有一个 A 类的实例作为私有财产)。

考虑这个可能的解决方案:

AClass.m

classdef AClass < handle
    properties (SetObservable)
        a                        %# observable property
    end
end

BClass.m

classdef BClass < handle
    properties (Access = private)
        aClassInst               %# instance of AClass
        lh                       %# event listener on aClassInst.a
    end
    properties (Dependent, SetAccess = private)
        b                        %# dependent property, read-only
    end
    events (ListenAccess = public, NotifyAccess = private)
        bPostSet                 %# custom event raised on b PostSet
    end
    methods
        function this = BClass(aClass)
            %# store AClass instance handle
            this.aClassInst = aClass;
            %# listen on PostSet event for property a of AClass instance
            this.lh = addlistener(this.aClassInst, 'a',  ...
                'PostSet', @this.aPostSet_EventHandler);
        end
        function val = get.b(this)
            val = this.aClassInst.a;
        end
    end
    methods (Access = private)
        function aPostSet_EventHandler(this, src, evt)
            %# raise bPostSet event, notifying all registered listeners
            notify(this, 'bPostSet')
        end
    end
end

基本上我们设置属性aA 类可观察到的。

接下来,在 Class 的构造函数中,我们为传递来侦听属性的 A Class 实例注册一个侦听器a变化。在回调中,我们通知该对象的侦听器b也改变了

因为我们无法真正筹集到PostSet手动,我创建了一个自定义事件bPostSet我们在前面的回调函数中提出了这一点。您始终可以自定义传递的事件数据,请参阅文档 http://www.mathworks.com/help/techdoc/matlab_oop/brb6gnc.html#brb6i_k看看如何。

这是一个测试用例:

%# create the objects
a = AClass();
b = BClass(a);

%# change property a. We will not recieve any notification
disp('a.a = 1')
a.a = 1;

%# now lets listen for the 'bChanged' event on b
lh = addlistener(b, 'bPostSet',@(o,e) disp('-- changed'));

%# try to change the property a again. We shall see notification
disp('a.a = 2')
a.a = 2;

%# remove event handler
delete(lh)

%# no more notifications
disp('a.a = 3')
a.a = 3;

输出是:

a.a = 1
a.a = 2
-- changed
a.a = 3

请注意,当我们注册侦听器时,我们如何仅与 BClass 实例进行交互。当然,因为所有类都派生于handle类、实例a和私有财产aClassInst两者都引用同一个对象。所以任何改变a.a立即反映出来b.aClassInst.a,这导致内部aPostSet_EventHandler执行,这又通知所有注册的侦听器我们的自定义事件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab 中的相关可观测属性。有效吗? 的相关文章

  • 为什么在派生类中不能像在 C# 中的基类中一样使用事件?

    在下面的代码中 我想通过派生 子类化类来扩展类的行为 并利用基类的事件 public class A public event EventHandler SomeEvent public void someMethod if SomeEve
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • jQuery 键盘事件处理程序按住

    我想为游戏创建一个简单的事件处理程序 这是我的代码 document keydown function e switch e keyCode case 65 left a console log left break case 68 rig
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 多个事件处理程序触发,为什么?

    我很难解决这个问题 我已经呆了三个小时了 但我仍然不明白为什么会这样 这是代码 private void Catagory SelectionChanged object sender SelectionChangedEventArgs e
  • 类是否应该有静态和非静态成员

    我试图找出一个类何时适合同时具有静态和非静态函数 又名 obj new ClassA obj gt doOOPStuff something ClassA doStaticStuff Note This example is done in
  • 工厂模式和策略模式

    我需要创建一个类来负责结果集处理 但可能会发生应该使用不同的算法来处理该结果集的情况 我知道以下选项 1 使用策略模式 伪代码如下 interface Strategy processResultSet ResultSet rs class
  • 这是依赖注入吗?这是一种不好的做法吗?

    我有一个小框架 我是这样编码的 我不确定这是否称为依赖注入 我不知道它是否像设计模式 我也不知道并且想知道是否通过 this因为 param 是一种不好的做法 看看这个 不是一个有效的示例 只是将这些代码写入浏览器中以供解释 This is
  • 如何在向量中的所有点之间绘制线?

    我有一个包含二维空间中一些点的向量 我希望 MATLAB 用从每个点到每个其他点绘制的线来绘制这些点 基本上 我想要一个所有顶点都连接的图 你能用情节来做到这一点吗 如果可以 怎么做 一种解决方案是使用该函数为每个点组合创建一组索引MESH
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 使用 jquery 事件 keydown 模拟在文本区域上输入不起作用

    我正在尝试制作 Facebook 自动回复消息脚本 这是我的代码 window load function var a setInterval function var e titlebarText html if e else texta
  • 更改 JSON.NET 序列化属性名称的方式

    如何更改 Newtonsoft JSON NET 序列化对象属性名称的方式 有几种方法 You can manually control how it serializes using the JsonTextWriter class ht
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • 将父控件的属性传递给子控件

    我正在为特定应用程序开发一组自定义控件 我想定义对于外观目的的控件集通用的属性 为了论证 让我们这样做CustomCtrl AccentColor 我想为我的 Windows 窗体定义相同的属性 即Form1 AccentColor当我更改
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 如何获取对象的所有属性?

    如何在 JavaScript 中使用反射获取对象的所有属性 循环遍历对象并获取属于该对象且不属于该对象的每个键 一个函数 var properties for var key in obj if obj hasOwnProperty key
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • 如何在 Spring 属性中进行算术运算?

随机推荐

  • Vim 中的“查找下一个”

    在 Vim 中向前搜索cake 我会输入 cake 但是当我按回车键时 光标跳到第一个匹配项 有没有类似于 查找下一个 的 Vim 命令 It is n for next and N for previous 如果您使用反向搜索 例如 ca
  • Python不打印输出

    我正在学习将 electro js 与 python 一起使用 并且我正在使用蟒蛇壳 https www npmjs com package python shell所以我有以下简单的Python脚本 import sys json sim
  • Python:可视化字典字典的最佳方式

    我想可视化以下字典中的字典 players info Afghanistan Asghar Stanikzai 809 0 Mohammad Nabi 851 0 Mohammad Shahzad 1713 0 Najibullah Zad
  • Laravel - 尝试在 ::first() 上获取非对象的属性

    好的 我明白了Trying to get property of non object当我尝试使用从数据库获取数据时 settings AdminSettings first 这是控制器代码
  • UITextField 获取当前编辑的单词

    我正在开发一个自动完成组件 我有一个问题想以某种简单的方式解决 我想支持对自动完成文本的编辑 例如 blablabl usertag blablabl 如果用户返回并编辑 usertag 字符串 我想在编辑时启动自动完成功能 问题是 如何从
  • Apache POI评估公式

    我的工作表单元格中有一些公式 我想在插入一些值后评估它们 前任 我的公式是 SUM B1 B2 插入值之前B1值为1 and B2值为3 公式结果为4 插入值后 现在 B1 有了值5 并且 B2 有值2但公式仍然产生4 我如何评估 触发这个
  • 使用 FQL 的随机好友

    我现在正在使用 fql 它将所有朋友列表放入数组中 然后我对该数组进行排序以获得随机朋友 但似乎需要很长时间 因为我必须收集所有朋友才能获得单个随机朋友 我如何在 fql 中找到随机好友 SELECT uid name pic sex FR
  • 搜索 WindowBuilder 文档/API

    我正在使用 WindowBuilder Pro 进行一个项目 在试图很好地掌握它的同时 我一直在寻找好的文档 但没有任何运气 我发现的最好的是Google WindowBuilder Pro 信息页面 http code google co
  • 带有 x86-64 组件的谐波系列

    尝试计算调和级数 现在我正在输入我想要添加的数字 当我输入像 1 2 这样的小数字时 程序只是停止 不会崩溃 它似乎正在进行计算 但它永远不会完成程序 这是我的代码 denominator xor r14 r14 zero out r14
  • MVC:我可以在控制器外的类内部使用 ModelState 吗?

    我可以在一节课上做这个吗 using System Web Mvc public static class aaa public static test if something ModelState AddModelError test
  • 安装 opencv-python-headless 需要很长时间

    当我安装时opencv python headless在 Google Colab 中 需要 15 分钟才能完成 My code pip install upgrade pip pip install opencv python headl
  • 在 Android studio 2.2.3 中找不到工具 > Firebase

    根据开发人员指南 https developer android com studio write firebase html https developer android com studio write firebase html 我
  • 验证库 (.lib) 中使用的 CRT

    如何检查 Windows 中的静态库 lib 链接到哪个运行时库 我正在使用 MDd 编译我的项目 并且我假设我链接到的库正在使用 MTd 多线程调试 Error 7 error LNK2005 public thiscall std Lo
  • 为什么我的手机无法访问电脑网络?

    我有一个问题 昨天我可以从手机访问我的计算机网络 但今天它不起作用 为什么会这样 我准备的东西 我已经使用 XAMPP 运行本地服务器 我已经开始Apache and MySQL 我通过 WIFI 连接到同一网络 我的手机是通过USB连接到
  • 在 IIS6 上使用 Decimal In Route 进行路由

    我的 MVC3 项目中有一条路线 当通过调试器和 IIS7 运行时 该路线在本地运行得非常好 但是 我们的服务器是 IIS6 当我将应用程序移出时 我收到 找不到页面 错误 我的猜测是这与路线中的小数有关 所以我尝试实现一个 RouteHa
  • 如何将参数传递给 webpack.config.js?

    我正在跟进these https www hipstercode com blog 27 指令基于this https github com vuejs templates webpack tree master template项目 官方
  • 在视图上创建全文索引时出现问题

    我有一个这样创建的视图 CREATE VIEW dbo vwData WITH SCHEMABINDING AS SELECT DataField1 DataField2 DataField3 FROM dbo tblData 当我尝试在其
  • 有时会出现模式关闭时的空白屏幕

    我有一个动态创建的表格 每行都有按钮 如果我单击按钮 模式将打开以输入模式后面带有黑屏的详细信息 单击接受按钮时 模式将关闭 黑屏必须消失 它有时会消失 但在其他情况下不会消失 这就是在模式中单击 接受 按钮后我的屏幕有时会出现的情况出现的
  • 无法调用基类的受保护函数?

    我无法在基类中调用受保护的函数 为什么 它看起来像这样 class B B2 public virtual f1 B 0 protected virtual f2 B codehere class D public B public vir
  • Matlab 中的相关可观测属性。有效吗?

    在 Matlab 类中 声明在语法上似乎是正确的property那是依赖者 计算未存储 和可观察的在同一时间 考虑代码 properties Access private instanceOfAnotherClass end propert