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

news2024/9/22 13:22:52

写在之前(吐槽)

最近由于变化了一些工作方向,开始需要使用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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查询和下载国自然科学基金

查询和下载国自然科学基金 打开网站 能够查到基本信息、项目参与人、项目摘要、结题摘要、结题报告、成果统计、成果产出&#xff08;主要为论文&#xff09; 结题报告可以在线阅读。 下面的参考博文中有下载结题报告书的步骤&#xff0c;不过是收费软件。 参考博文 国自…

设备树与中断,操作系统如何使用中断

设备树中会对中断进行描述: 首先 cpu工程师会写好中断控制器的设备树节点, 里面会定义寄存器以及如何描述中断, gpio0209…中有两个属性, 一是gpio-controller 二是interrupt-cells。后者表示该设备是一个中断控制器。 interrupt-cells表示用两个属性描述中断。 之后再来看下…

PostGreSQL模式schema

问题引入 之前在做数据库设计时&#xff0c;经常会忽略schema模式&#xff0c;直接在数据库下的public模式下建立各类数据表。如果数据表命名不够规范&#xff0c;后期寻找某张表时就会比较麻烦。通过 所幸&#xff0c;PostgreSQL 的模式schema管理&#xff0c;可以对这个问题…

吴恩达《机器学习》2-1:模型描述

一、单变量线性回归 单变量线性回归是监督学习中的一种算法&#xff0c;通常用于解决回归问题。在单变量线性回归中&#xff0c;我们有一个训练数据集&#xff0c;其中包括一组输入特征&#xff08;通常表示为&#x1d465;&#xff09;和相应的输出目标&#xff08;通常表示为…

RabbitMQ消费者的可靠性

目录 一、消费者确认 二、失败重试机制 2.1、失败处理策略 三、业务幂等性 3.1、唯一消息ID 3.2、业务判断 3.3、兜底方案 一、消费者确认 RabbitMQ提供了消费者确认机制&#xff08;Consumer Acknowledgement&#xff09;。即&#xff1a;当消费者处理消息结束后&#x…

如何学好机器学习?机器学习一定需要下面这几方面知识!

学好机器学习需要有一定的数学基础和计算机编程基础。总结一下&#xff0c;学机器学习需要下面这几方面知识&#xff1a; 数学基础&#xff1a;机器学习中很多方面都设计到了数学知识&#xff0c;较好的数学知识可以在理解和应用机器学习中发挥积极的作用&#xff0c;一般包括…

翻页电子杂志制作方法,看完有手就行

你还在使用传统的纸质杂志进行宣传推广嘛&#xff1f;不打算紧跟时代的发展&#xff0c;融入互联网制作在线翻页电子杂志嘛&#xff01;电子杂志具有成本低&#xff0c;易于传播&#xff0c;宣传速度快&#xff0c;推广范围大&#xff0c;而且制作电子杂志也很easy噢&#xff0…

支持Lrc2024 Boris FX Optics最新 for mac

Boris FX Optics是一款强大的图像处理软件&#xff0c;提供了各种专业级的特效和滤镜&#xff0c;用于增强和改善视频和图像的外观。该软件适用于照片编辑、摄影、视频制作等领域&#xff0c;具有广泛的应用范围。 Boris FX Optics功能包括但不限于以下几个方面&#xff1a; …

iOS iGameGuardian修改器检测方案

一直以来&#xff0c;iOS 系统的安全性、稳定性都是其与安卓竞争的主力卖点。这要归功于 iOS 系统独特的闭源生态&#xff0c;应用软件上架会经过严格审核与测试。所以&#xff0c;iOS端的作弊手段&#xff0c;总是在尝试绕过 App Store 的审查。 常见的 iOS 游戏作弊&#xf…

删除A文件夹中 AB文件夹共有的文件

import ospath r"Z:\Users\86152\Desktop\chui shen-sw" chui_shen os.listdir(path)# print(chui_shen) # print(len(chui_shen)) for i in chui_shen:os.remove(rZ:\Users\86152\Desktop\ce shen-sw/ i)A文件夹&#xff1a; B文件夹&#xff1a; 我这个情况是 A文…

十九、类型信息(2)

本章概要 Class 对象 类字面常量泛化的 Class 引用cast() 方法 Class 对象 要理解 RTTI 在 Java 中的工作原理&#xff0c;首先必须知道类型信息在运行时是如何表示的。这项工作是由称为 **Class**对象 的特殊对象完成的&#xff0c;它包含了与类有关的信息。实际上&#x…

STM32串口通信

数据通信的基础概念 在单片机的应用中&#xff0c;数据通信是必不可少的一部分&#xff0c;比如&#xff1a;单片机和上位机、单片机和外 围器件之间&#xff0c;它们都有数据通信的需求。由于设备之间的电气特性、传输速率、可靠性要求各 不相同&#xff0c;于是就有了各种通信…

基于布谷鸟算法的无人机航迹规划-附代码

基于布谷鸟算法的无人机航迹规划 文章目录 基于布谷鸟算法的无人机航迹规划1.布谷鸟搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用布谷鸟算法来优化无人机航迹规划。 1.布谷鸟…

[Python进阶] 消息框、弹窗:pymsgbox.alert

6.18 消息框、弹窗&#xff1a;pymsgbox.alert 作用&#xff1a; 显示带有文本和单个OK按钮的简单消息框。返回所单击按钮的文本。 参数&#xff1a; text “”, 消息框标题 title “”, 消息框内容 button pymsgbox.OK_TEXT, 消息框自带的按钮&#xff0c;默认为&#xff…

@TableField(fill = FieldFill.INSERT)这个注解的作用

TableField 是 MyBatis-Plus提供的一个注解&#xff0c;用于标注实体类的属性与数据库表的字段之间的映射关系。当你在一个实体类的属性上使用 TableField(fill FieldFill.INSERT) 注解时&#xff0c;你告诉 MyBatis-Plus 在插入记录时自动填充这个字段。 FieldFill.INSERT 是一…

Docker 网络管理及资源控制

目录 1 Docker 网络 1.1 Docker 网络实现原理 1.2 Docker 的网络模式 1.3 网络模式详解 1.3.1 host模式 1.3.2 container模式 1.3.3 none模式 1.3.4 bridge模式 1.3.5 自定义网络 1.4 创建自定义网络 2 资源控制 2.1 CPU 资源控制 2.2 对内存使用的限制 2.3 对磁盘…

如何在【逻辑回归】中优化控制正则化程度的超参数C

一.逻辑回归基本介绍 逻辑回归也称作logistic回归&#xff0c;是一种广义的线性回归分析模型&#xff0c;主要是用来解决二分类问题&#xff08;也可以解决多分类问题&#xff09;。通过训练集来训练模型&#xff0c;并在训练结束后对测试集进行分类。 通过激活函数&…

我该如何入门Python机器学习?

我是在研一的时候开始学习机器学习的。相对于题主来说&#xff0c;我更是一窍不通&#xff0c;Python都没有一点点基础。总结一下我在学习Python的过程&#xff0c;以及自己在学习机器学习过程中的用到的优质资源&#xff0c;也总结一下我的学习心得。 一、怎么学习Python&…

开放式耳机百元价位怎么选、公认最好的百元开放式耳机

开放式耳机采用挂耳式的佩戴方式&#xff0c;不需封闭耳道&#xff0c;这一创新设计允许我们欣赏音乐的同时保持对周围环境的感知&#xff0c;从而在户外运动、通勤或其他活动中提供更安全的体验。而且&#xff0c;在预算有限的情况下&#xff0c;我们可以在百元价位范围内找到…

JS中Map对象与object的区别

若想了解Map对象可以阅读本人这篇ES6初步了解Map Map对象与object有什么区别&#xff1f;让我为大家介绍一下吧&#xff01; 共同点 二者都是以key-value的形式对数据进行存储 const obj {name:"zs",age:18}console.log(obj)let m new Map()m.set("name&quo…