matlab中类的分别之handle类和value类——matlab无法修改类属性值的可能原因

写在之前(吐槽)

最近由于变化了一些工作方向,开始需要使用matlab进行开发,哎哟喂,matlab使用的我想吐,那个matlab编辑器又没代码提示,又没彩色,我只好用vscode进行代码编辑,然后使用matlab软件运行,我的评价是,想吐,但是没法,学术上算法好像都是matlab跑的,所以到底图啥呢,不理解。

matlab类

如同其他类一样,类都是面向对象的产物包括python java 以及C++,都会有类的一些定义,有很多东西在不同的语言条件下是不一样的,这些包括什么私有属性和公有属性,以及构造函数,还有继承啊,父类子类巴拉巴拉的,需要进行一番查询,这里蛮推荐gpt干这一类事情的,因为真的很方便,在网上找相关的资料,有些要么就是一坨讲不清楚,有些讲的很好但是针对你想问的一些问题并不能很好的解答,所以大大增加了一些学习成本,如我在gpt里面问
在这里插入图片描述
他会很好的解答你,如何并回答,你有什么问题也会解答你。但是,终归还是有但是,他有些东西是有错误的,你必须要自己去修改,如下所述就是一个

handle类和value类的区别

我在写代码的时候遇到这样一个情况,下面一段代码如下

classdef MyClass
    properties
        myProperty
    end
    
    methods
        function obj = MyClass(initialValue)
            % 构造函数,初始化属性值
            obj.myProperty = initialValue;
        end
        
        function modifyProperty(obj, newValue)
            % 在类方法中修改属性值
            obj.myProperty = newValue;
        end
    end
end

有这样一段代码,我定义了一个MyClass的类,然后里面有个myProperty的属性,我在构造函数里面初始化了这个值,需要在下面的modifyProperty方法里面去修改值,如这样

myObject = MyClass(42); % 创建对象并初始化属性为 42
disp(myObject.myProperty); % 显示属性的值

myObject.modifyProperty(100); % 在类方法中修改属性的值
disp(myObject.myProperty); % 显示修改后的属性值

对于其他的面向对象语言来说,这是非常直觉的,我直接修改即可了,但是在这一段代码里你会发现,握草修改不成功,很离谱(我目前使用的版本是2020不排除以后matlab进行修改的可能性)

经过一番查询,我发现一些端倪,有一个value类和一个handle类的说法,如果你在这里定义类的时候继承了handle类,如下

classdef MyClass < handle

就会非常神奇的发现,他修改成功了,amazing!
那matlab的handle类和value类有什么区别呢,在于拷贝的区别。

handle 类

  • handle 类的对象是通过引用传递的。这意味着当你将一个 handle 类的对象赋值给另一个变量时,实际上只是创建了一个指向相同对象的新引用,而不是复制对象本身。
  • 修改一个 handle 类的对象将影响所有指向该对象的引用,因为它们共享相同的对象。
  • handle 类适用于需要在不同地方共享和修改相同对象的情况,例如在多个函数之间传递和修改对象。

value 类

  • value 类的对象是通过值传递的。这意味着当你将一个 value 类的对象赋值给另一个变量时,实际上创建了该对象的一个独立副本,而不是共享相同的对象。
  • 修改一个 value 类的对象不会影响其他对象的值,因为它们都有自己的独立副本。
  • value 类适用于需要创建和维护独立副本的情况,以避免不同部分的代码共享相同的数据。

其实学过c语言的人对这个概念就感觉不会很陌生,这不就是一个是复制值进去,一个是复制指针进去吗,在python里也一样一个是浅复制,一个是深复制而已,的确如此。
他的复制值导致的一个问题就是在于我们在下面的那个myObject.modifyProperty方法里面修改的obj.myProperty 并不是真正你在类定义里面的那个地址的值,而是复制过去的新地址的同样值所以导致你在该方法中赋值是有效的,一旦超过那个域你就会发现修改是无效的。
而且在matlab中,如果你不进行继承handle这一步操作的话,直接定义一个类,他默认是继承value类,这就导致你用的都是**“浅复制”**。

这也就是无法修改类属性值的根本原因(奇怪的知识又增加了hhhh)
这篇博客的老哥写的也非常清楚,大家可以参考一下https://blog.csdn.net/qq_43157190/article/details/104101122

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/107272.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络【CN】介质访问控制

信道划分介质访问控制 FDMTDMWDMCDM【掌握eg即可】 随机介质访问控制 CSMA 1-坚持CSMA 非坚持CSMA p-坚持CSMA 空闲时 立即发送数据 立即发送数据 以概率P发送数据&#xff0c;以概率1-p推迟到下一个时隙 忙碌时 继续坚持侦听 放弃侦听&#xff0c;等待一个随机的时…

Centos使用war文件部署jenkins

部署jenkins所需要的jdk环境如下&#xff1a; 这里下载官网最新的版本&#xff1a; 选择jenkins2.414.3版本&#xff0c;所以jdk环境最低得是java11 安装java11环境 这里直接安装open-jdk yum -y install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64下载jenkins最新…

12种常见的恶意软件类型与防范建议

1、病毒 病毒是迄今为止最常见的恶意软件类型之一。它是一种能够感染、破坏计算机设备&#xff0c;并在其运行系统上自我复制的程序。由于病毒是自我复制的&#xff0c;一旦安装并运行&#xff0c;它们就可以在同一网络上自动从一台设备传播到另一台设备&#xff0c;无需人为干…

ARM汇编指令之数据操作指令

数据搬移指令&#xff1a;立即数&#xff1a;在待判断的32位数&#xff08;以十六进制展开&#xff09;中&#xff0c;寻找一个0~255&#xff08;即0x00~0xff&#xff09;之间的数值&#xff0c;然后将这个数值循环右移偶数个位置&#xff0c;可以得到待判断的数&#xff0c;即…

【期中复习】深度学习

文章目录 机器&#xff08;深度&#xff09;学习的四大核心要素为什么深度学习&#xff0c;不增加网络宽度黑盒模型的问题计算图线性神经网络梯度下降学习率优化方法softmax函数用于多分类交叉熵线性回归与softmax回归的对比为什么需要非线性激活函数感知机线性回归、softmax回…

2023版 STM32实战12 IIC总线读写AT24C02

IIC简述 一个多主从的串行总线&#xff0c;又叫I2C&#xff0c;是由飞利浦公司发明的通讯总线 IIC特点 -1- 串行(逐bit传输) -2- 同步(共用时钟线) -3- 半双工(收发不同进行) -4- 总线上的任何设备都可以是主机 开发使用习惯和理解 -1- 通过地址寻址 -2- 数据线的…

「网络编程」数据链路层协议_ 以太网协议学习

「前言」文章内容是数据链路层以太网协议的讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、以太网协议简介二、以太网帧格式&#xff08;报头&#xff09;三、MTU对上层协议的影响四、ARP协议4.1 ARP协议的作用4.2 ARP协议报头 一、以太网协…

基于单片机的IC卡门禁系统设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、主要研究内容及总体设计方案1.1 系统方案设计1.2系统工作原理 二、硬件设计2.1 主控电路 三、软件设计3.2主程序设计实物附录1 原理图附录2 源程序清单 四、 结论五、 文章目录 概要 本论文重点通过对射频技术…

小米14系列, OPPO Find N3安装谷歌服务框架,安装Play商店,Google

10月26号小米发布了新款手机小米14,那么很多大家需求问是否支持谷歌服务框架,是否支持Google Play商店gms。因为毕竟小米公司现在安装的系统是HyperOS澎湃OS。但是我拿到手机之后会发现还是开机初始界面会显示power by android,证明这一点他还是支持安装谷歌,包括最近一段时间发…

公司电脑如何限制安装软件

公司电脑如何限制安装软件 安企神终端管理系统下载使用 在企业环境中&#xff0c;电脑已经成为企业中必不可少的办公工具&#xff0c;确保员工的生产力和公司的信息安全是至关重要的。为了实现这一目标&#xff0c;公司可能会限制员工在某些情况下安装软件或者由管理员来为终…

一个Entity Framework Core的性能优化案例

概要 本文提供一个EF Core的优化案例&#xff0c;主要介绍一些EF Core常用的优化方法&#xff0c;以及在优化过程中&#xff0c;出现性能反复的时候的解决方法&#xff0c;并澄清一些对优化概念的误解&#xff0c;例如AsNoTracking并不包治百病。 本文使用的是Dotnet 6.0和EF…

TVRNet网络PyTorch实现

文章目录 文章地址网络各层结构代码实现 文章地址 An End-to-End Traffic Visibility Regression Algorithm文章通过训练搜集得到的真实道路图像数据集&#xff08;Actual Road dense image Dataset, ARD&#xff09;&#xff0c;通过专业的能见度计和多人标注&#xff0c;获得…

Qt QWebEngine 更换语言

背景 使用Qt QWebEngine开发的应用&#xff0c;在一些场景下&#xff0c;会显示英文文本&#xff0c;比如右键、JS弹出的对话框&#xff0c;所以需要进行汉化&#xff0c;更改语言。 准备翻译文件 Qt有提供翻译好的ts文件&#xff0c;我们可以直接下载ts文件qtwebengine_zh_…

世界前沿技术发展报告2023《世界航空技术发展报告》(二)军用飞机技术

&#xff08;二&#xff09;军用飞机技术 1.作战飞机1.1 美俄对第五代战斗机进行升级改进1.2 美欧第六代战斗机技术取得新进展1.3 美国B-21隐身轰炸机正式亮相 2.支援飞机2.1 美国空军拟研制翼身融合布局运输/加油机2.2 美欧厂商积极参加北约未来预警机技术研究项目2.3 美国空军…

1817_ChibiOS的RT线程

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 关于线程&#xff0c;有几个概念需要弄清楚&#xff1a;声明、生命循环、延迟、线程引用、线程队列、线程时间、优先级管理、调度。 2. 两个声明…

线性表的定义和基本操作

线性表的定义和基本操作 一、线性表的定义 线性表&#xff08;Linear List&#xff09;是具有相同数据类型的n(n>0)个数据元素的有限序列&#xff0c;其中n为表长&#xff0c;当n0时线性表是一个空表。若用L命名线性表&#xff0c;则其一般表示为 L (a1,a2,...,ai,ai1,.…

JMeter + Ant + Jenkins持续集成-接口自动化测试

需要安装的工具&#xff1a; jdk1.8jmeter3.2ant1.9jenkins2.1 1、Jdkwin7系统如何安装jdk及环境变量的配置-百度经验 安装包安装设置环境变量验证是否安装正确 Java -version检查&#xff0c;如下就代表安装成功了&#xff0c;环境变量设置就去搜索了&#xff0c;网上很多…

TimeGPT:时间序列预测的第一个基础模型

时间序列预测领域在最近的几年有着快速的发展&#xff0c;比如N-BEATS、N-HiTS、PatchTST和TimesNet。 大型语言模型(llm)最近在ChatGPT等应用程序中变得非常流行&#xff0c;因为它们可以适应各种各样的任务&#xff0c;而无需进一步的训练。 这就引出了一个问题:时间序列的…

File相关方法2

一.获取当前目录下所有一级文件名称 1.代码 package org.example;import java.io.File;public class day03 {public static void main(String[] args) {//获取当前目录下所有一级文件名称final File f1 new File("d:/temp");final String[] name f1.list();for (…

VDA到Excel方案介绍之自定义邮件接收主题

VDA标准是德国汽车工业协会&#xff08;Verband der Automobilindustrie&#xff0c;简称VDA&#xff09;制定的一系列汽车行业标准。这些标准包括了汽车生产、质量管理、供应链管理、环境保护、安全性能等方面的规范和指南。VDA标准通常被德国和国际上的汽车制造商采用&#x…