对象方法内的自引用

2024-04-08

刚刚开始在 Matlab OO 编程中进行速成课程,我想为一个对象编写一个 set 方法,该方法将设置值,然后通过在另一个对象的相关字段中设置自身来进行交互。

classdef Person
properties
  age;
  sex;
  priority; % net priority based on all adjustment values
  adjustment; % personal adjustment value for each interest
  family;
end

methods
  function obj = set.sex(obj, value)
    if value == 'm' || value == 'f'
      obj.sex = value;
    else
      error('Sex must be m or f')
    end
  end

  function obj = set.family(obj,value)
    if class(value) == 'Family'
      obj.family = value;
    else
      error('Family must be of type Family')
    end
  end
end
end



classdef Family
properties
  husband;
  wife;
  children;
  elders;
  adjustment; % interest adjustment values
end

methods
  function this = set.husband(this,person)
    if class(person) == 'Person'
      this.husband = person;
      person.family = this;
    else
      error('Husband must be of type Person')
    end
  end

  function this = set.wife(this,person)
    if class(person) == 'Person'
      this.wife = person;
      person.family = this;
    else
      error('Wife must be of type Person')
    end
  end
end
end

所以我现在要做的是:

p = Person
f = Family
f.husband = p
p.family = f

我希望家人和个人能够自动相互定位:

p = Person
f = Family
f.husband = p

Family set.husband 函数会将 p 的家庭值设置为 f。为什么我的代码不起作用?据我所知,我正在按照评论中的建议进行操作。

编辑: 经过一番混乱之后,我确认“this”和“person”是正确类型的对象。最终的问题是 Matlab 按值传递而不是按引用传递。除非有人知道解决方法,否则我会尽可能回答自己。


通常考虑普通物体value对象。当它们传递给函数或方法时,仅传递值,而不传递对原始对象的引用。 Matlab 可以使用只读引用机制来加快速度,但函数或方法不能更改原始对象的属性。

为了能够通过引用传递输入参数,您的自定义对象需要是handle目的。只需在定义类时,继承自handle这应该可以解决问题:

classdef Person < handle

and

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

对象方法内的自引用 的相关文章

  • 如何从类外部更改公共 R6 类方法?

    我希望能够在我的 R6 类中重新定义公共方法 以便它根据该类保存的数据类型进行更改 如下所示 library R6 Simple lt R6Class Simple public list dt mtcars my print functi
  • PHP 中可以动态添加数据成员吗?

    我想知道是否可以在 PHP 运行时添加新的类数据成员 Yes prop newname obj gt prop 42 会做同样的事情 obj gt newname 42 如果 obj 尚不存在 则任一者都会将 newname 添加为属性
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • MATLAB 可执行文件太慢

    我使用以下命令将 MATLAB 程序转换为基于控制台的应用程序deploytool在 MATLAB 中 MATLAB m文件执行大约需要 2 秒 但在我将其转换为可执行文件并调用 exe 执行需要45秒 太长了 我想将 MATLAB 程序与
  • 列出某个类的所有对象

    好的 我的问题如下 我有一个用这个构造函数描述宠物的类 public function construct name type age 所以我想做的是制作一些宠物对象 然后我想打印这个类的所有对象的所有属性 这样它看起来像this http
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 检查一个类是否是另一个类的子类

    我想在不创建实例的情况下检查一个类是否是另一个类的子类 我有一个类 它接收类名作为参数 作为验证过程的一部分 我想检查它是否属于特定的类系列 以防止安全问题等 有什么好的方法可以做到这一点吗 is subclass of http php
  • Delphi:写入后代类中私有祖先的字段

    我需要修复第三方组件 该组件的类具有私有变量 该变量由其后代主动使用 TThirdPartyComponentBase class private FSomeVar Integer public end TThirdPartyCompone
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • 检查 Objective-C 块类型?

    这主要是出于好奇 我不太确定它的实际用途是什么 但就这样吧 由于块也是 Objective C 对象 是否可以检查它们的类型 也就是说 它是否响应isKindOfClass 消息以及如何使用该消息来处理块 我天真的以为事情大概是这样的 vo
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • Numpy 相当于 MATLAB 的 hist [重复]

    这个问题在这里已经有答案了 由于某种原因 Numpy 的 hist 总是返回比 MATLAB 的 hist 少 1 个 bin 例如在 MATLAB 中 x 1 2 2 2 1 4 4 2 3 3 3 3 Rep Val hist x un
  • 使用元类的 __call__ 方法而不是 __new__?

    在讨论元类时 the docs http docs python org reference datamodel html state 您当然也可以重写其他类方法 或添加新的 方法 例如定义一个自定义 call 方法中的 元类允许在调用类时
  • 多重继承争论 II:根据 Stroustrup 的说法 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我非常了解关于为什么接口继承优于多重继承的传统争论 这里已经有一篇文章 C 应该有多重继承吗 https stackoverflow com q

随机推荐

  • JEdi​​torPane 的 html 中的插入符位置

    JEdi torPane 的 getCaretPosition 方法提供 html 控件的仅文本部分的索引 是否有可能将索引放入html文本中 更具体地说 假设我有一个 html 文本 其中 表示插入符号位置 abcd img src 1
  • 使用 OOP 的闭包方法时如何实现受保护的成员?

    现在我正在使用实施 OOP 的闭包 http lua users org wiki ObjectOrientationClosureApproach在卢阿 下面是一个简短的示例 我的问题发生在尝试实施时stronger heal insid
  • 为什么选择 Eigen 作为 TensorFlow? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 TensorFlow白皮书提到使用了Eigen 是否有关于如何选择 Eigen 的公开解释 它们是在 T
  • 为 Atom feed 创建 XSL

    我正在创建一个小的自定义 XSL 文件来呈现 RSS 提要 内容是基本的 如下 除非源 XML 在提要定义中包含行 xmlns http www w3 org 2005 Atom 否则此方法可以正常工作 我该如何解决这个问题 我对命名空间不
  • 如何让不和谐机器人添加你为好友

    我正在创建一个不和谐机器人 我想将其添加到 DM 组中 这样我就可以保持较低的服务器级别 但是 您无法将不是朋友的人添加到群组 DM 中 有没有办法让不和谐机器人接受好友请求 不可能 机器人帐户无权使用 Discord 的关系端点 这意味着
  • 领事注销“失败”服务

    我有 Consul 在 Consul v0 5 2 版本上运行 服务在 Mesos 中运行 服务不断从一台服务器转移到另一台服务器 有没有办法取消领事中处于 失败 状态的服务 我可以使用此curl 获取处于失败状态的服务列表 curl ht
  • 具有多个计数子查询的 SELECT 查询

    我刚刚为报告编写了这个查询 但我最初编写它时没有在每个子查询上使用日期范围过滤器 但这没有用 所以我将它添加到每个子查询中 这很有效 但我真的不喜欢每次都重复它 是否有语法可以更简单地完成同样的事情 SELECT Count r id AS
  • 聚合、组合、关联、直接关联

    我正在复习面向对象编程方面的知识 在类之间的关系主题下 我遇到了一些对我来说有点模糊的关系 我知道依赖项 uses a 和继承 is a 但我对聚合 组合 关联和直接关联有点不熟悉 另外 其中哪一个是 has a 关系 有些可以与关联互换使
  • MongoDB - 使用全文搜索搜索单词和短语时的逻辑 OR

    我之前问过一个相关问题 根据发帖者的建议 创建了这个新问题作为后续问题 MongoDB 全文搜索 匹配单词和精确短语 https stackoverflow com questions 28368883 mongodb full text
  • 页面加载时,angularjs ng-cloak 不起作用

    我是 AngularJS 的新手 并试图解决在评估 ng if 条件之前显示某些 HTML 代码的问题 我正在使用 ng cloak 正如许多其他堆栈溢出 URL 中提到的那样 但它仍然对我不起作用 我正在尝试加载默认图像 如果 URL 上
  • 每个模块必须有唯一的路径

    我已经使用 GIT 从版本控制导入了一个项目 导入 同步等等之后 它给了我这个错误 错误 模块 LinkedCraftMobile linkedcraft android 指向文件系统中的同一目录 每个模块都必须有唯一的路径 我想要一个可以
  • 如何将数据表存储在缓存中以便重复使用?

    在我的应用程序中 我使用了通用处理程序来处理请求 我想要一种机制 如果第一次请求到达处理程序 它会向服务器发出请求 然后缓存整个数据表 因此对于即将到来的请求 如果下一个请求的产品代码存在于缓存的数据表中 则它不应该去再次获取数据的服务器
  • Net Core自定义用户属性

    我在 NET Core 项目中使用默认授权 我想检查用户是否是管理员 因此在 ApplicationUser cs 模型中我添加了以下内容 public class ApplicationUser IdentityUser public b
  • 实体框架中的 FirstOrDefault 调用已缓存,但数据库已更改

    我有一个奇怪的问题 我以前没有遇到过 我使用实体框架来检索我的记录 我有以下电话 var dbOrganisation repository DbOrganisation FirstOrDefault c gt c Id id 我预计不会缓
  • NfcAdapter.getDefaultAdapter(this) 返回 null 但 NFC 可以工作

    我的应用程序在后台和前台使用 NFC 读取 对于用户信息 我在活动中使用 CountDownTimer 120 1000 5 1000 和方法 onTick long l 每 5 秒检查一次 NFC 状态 有时 在 Android 4 2
  • Android 短按打开 ContextMenu + 传递项目单击的详细信息

    lv setOnItemClickListener new OnItemClickListener Override public void onItemClick AdapterView
  • 解决Java中的传递依赖冲突

    我正在尝试建立一个空投向导 http www dropwizard io 泽西岛 与 HBase 通信的 REST 端点 尽管这是我仅有的两个顶级依赖项 但这两个依赖项都加载了许多冲突的传递依赖项 这种冲突的一个简单例子是 Google 的
  • Receive-Job 返回意外的变量类型

    我正在尝试执行Invoke Sqlcmd命令 来自SQLServer模块 https learn microsoft com en us sql powershell sql server powershell view sql serve
  • 输入和按钮与 Bootstrap 在同一行

    我想将输入字段和按钮放在同一行中 我想为按钮设置固定大小 并且希望表单填充可用空间 我尝试创建自己的解决方案 但不幸的是该按钮低于输入字段 我怎样才能解决这个问题 CSS input bar display table width 100
  • 对象方法内的自引用

    刚刚开始在 Matlab OO 编程中进行速成课程 我想为一个对象编写一个 set 方法 该方法将设置值 然后通过在另一个对象的相关字段中设置自身来进行交互 classdef Person properties age sex priori