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

写在之前(吐槽)

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

matlab类

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

handle类和value类的区别

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

classdef MyClasspropertiesmyPropertyendmethodsfunction obj = MyClass(initialValue)% 构造函数,初始化属性值obj.myProperty = initialValue;endfunction modifyProperty(obj, newValue)% 在类方法中修改属性值obj.myProperty = newValue;endend
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.mzph.cn/news/122753.shtml

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

相关文章

EASYX动画效果实现

eg1:绘制小球的动画效果 通过一下的代码实现小球从左向右移动效果&#xff0c;计算小球的移动速度和帧率实现移动效果平和造成视觉上的错觉 #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #define PI 3.14 // 1PI …

springboot在线招聘系统

springboot在线招聘管理系统&#xff0c;java在线招聘管理系统&#xff0c;在线招聘管理系统 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;8.x版本都可&#xff09; 硬件环境&#xf…

云服务器的先驱,亚马逊云科技海外云服务器领军者

随着第三次工业革命的发展&#xff0c;移动互联网技术带来的信息技术革命为我们的生活带来了极大的便捷。其中&#xff0c;不少优秀的云服务器产品发挥了不可低估的作用&#xff0c;你或许听说过亚马逊云科技、谷歌GCP、IBM Cloud等优秀的海外云服务器。那么云服务器有哪些&…

Word批量删除文档属性和个人信息方法图解

投标文件中设计敏感信息&#xff0c;在投标前必须删除&#xff0c;Word批量删除文档属性和个人信息方法图解&#xff1a; 右键word文件属性--详细信息&#xff0c;可以查看如下信息&#xff1b; 删除上述信息的办法&#xff1a; 1.打开word文件---文件 2.检查文档、检查文档 检…

【Python · PyTorch】线性代数 微积分

本文采用Python及PyTorch版本如下&#xff1a; Python&#xff1a;3.9.0 PyTorch&#xff1a;2.0.1cpu 本文为博主自用知识点提纲&#xff0c;无过于具体介绍&#xff0c;详细内容请参考其他文章。 线性代数 & 微积分 1. 线性代数1.1 基础1.1.1 标量1.1.2 向量长度&…

分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测

分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测 目录 分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现KOA-CNN-BiLSTM-selfAttention开普勒算法优化卷积双向长短期记忆神…

HIT_OS_LAB1 调试分析 Linux 0.00 引导程序

操作系统实验一 姓名&#xff1a;董帅学号&#xff1a;2021111547班级&#xff1a;21R0312 1.1 实验目的 熟悉实验环境掌握如何手写Bochs虚拟机的配置文件掌握Bochs虚拟机的调试技巧掌握操作系统启动的步骤 1.2 实验内容 1.2.1 掌握如何手写Bochs虚拟机的配置文件 boot: f…

使用 Visual Studio Code 编写 TypeScript程序

安装 TypeScript 首先&#xff0c;确保你已经安装了 TypeScript&#xff0c;如果没有安装&#xff0c;请参考https://blog.csdn.net/David_house/article/details/134077973?spm1001.2014.3001.5502进行安装 创建 新建一个文件夹&#xff0c;用vs code打开&#xff0c;在文…

学习笔记---更进一步的双向链表专题~~

目录 1. 双向链表的结构&#x1f98a; 2. 实现双向链表&#x1f41d; 2.1 要实现的目标&#x1f3af; 2.2 创建初始化&#x1f98b; 2.2.1 List.h 2.2.2 List.c 2.2.3 test.c 2.2.4 代码测试运行 2.3 尾插打印头插&#x1fabc; 思路分析 2.3.1 List.h 2.3.2 List.…

基于Qt 的CAN Bus实现

# 简介 从 Qt5.8 开始,提供了 CAN Bus 类,假设您的 Qt 版本没有 CAN Bus,可以参考 Linux 应用编程来操控开发板的 CAN,目前我们主要讲解 Qt 相关的 CAN编程。其实 Qt 也提供了相关的 Qt CAN 的例子,我们也可以直接参考来编程。读者手上需要有测试 CAN 的仪器!否则写好程…

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双…

python安装库

查看安装的库 按下开始r 输入cmd 查看python版本 查看python所有库 安装一个库 在pycharm里面查看库文件 在pycharm里面安装库 在anaconda里面安装库和查看库

【面试经典150 | 栈】最小栈

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;辅助栈方法二&#xff1a;一个栈方法三&#xff1a;栈中存放差值 其他语言python3 写在最后 Tag 【设计类】【栈】 题目来源 155. 最小栈 题目解读 本题是一个设计类的题目&#xff0c;设计一个最小栈类 MinStack() …

Linux 基本语句_8_C语言_文件控制

为了解决多个进程同时操作一个文件&#xff0c;产生一些情况&#xff0c;通常对文件进行上锁&#xff0c;已解决对共享文件的竞争 对打开文件进行各种操作&#xff1a; int fcentl(int fd, int cmd, .../*arg*/如果cmd与锁操作有关&#xff0c;那么fcentl函数的第三个参数就要…

【深度学习】【NLP】如何得到一个分词器,如何训练自定义分词器:从基础到实践

文章目录 什么是分词&#xff1f;分词算法使用Python训练分词器步骤1&#xff1a;选择分词算法步骤2&#xff1a;准备训练语料步骤3&#xff1a;配置分词器参数步骤4&#xff1a;训练分词器步骤5&#xff1a;测试和使用分词器 代码示例&#xff1a;使用SentencePiece训练分词器…

【算法|动态规划No.32 | 完全背包问题】完全背包模板题

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

79 电话号码的字母组合

电话号码的字母组合 题解1 回溯比较直观的理解 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入…

Perl爬虫程序

以下是一个使用Perl爬虫程序&#xff0c;用于爬取图像。每行代码的中文解释如下&#xff1a; #!/usr/bin/perl ​ use strict; use warnings; use Mojo::UserAgent; use JSON; ​ # 创建一个Mojo::UserAgent实例 my $ua Mojo::UserAgent->new; ​ # 使用获取代理 my $prox…

Android中 BufferQueue 和 Gralloc

目录 零、本篇讨论范围一、图片数据流的生产者与消费者1.1 生产者1.2 消费者 二、生产者与消费者间数据的传递2.1 BufferQueue2.2 Gralloc 零、本篇讨论范围 接上篇 SurfaceFlinger做Layer合成时&#xff0c;如何与HAL层进行交互 后&#xff1a; 本篇的讨论范围如下图红框中所…

2024年天津中德应用技术大学专升本物流管理专业课考试大纲

天津中德应用技术大学物流管理专业&#xff08;高职升本科&#xff09;2024年专业基础考试大纲 一、试卷类型 物流管理专业升本专业课考试共1套试卷&#xff0c;总分200分&#xff0c;考试时间为2小时。内容包含仓储与配送管理40%、物流基础30%&#xff0c;运输管理30%&#…