Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab OOP-getter方法可以有参数吗?_Matlab_Oop - Fatal编程技术网

Matlab OOP-getter方法可以有参数吗?

Matlab OOP-getter方法可以有参数吗?,matlab,oop,Matlab,Oop,我正在做一个MatlabOOP项目,我需要一个带一个参数的getter方法。因为我不想把这个问题说得很具体,所以我想概括一下。所以这里是上下文: 我有一个2D空间对象(SpaceObject),具有以下字段:X_Pos、Y_Pos和Movement_Model X_位置和Y_位置描述空间对象在XY平面中的位置 运动模型是描述空间对象在XY平面上运动的对象。此字段初始化为空[],因此可以定义或取消定义 当未定义“移动”模型字段对象时,约定为X_位置和Y_位置是时不变的。通过编写pos=space

我正在做一个MatlabOOP项目,我需要一个带一个参数的getter方法。因为我不想把这个问题说得很具体,所以我想概括一下。所以这里是上下文:

  • 我有一个2D空间对象(SpaceObject),具有以下字段:X_Pos、Y_Pos和Movement_Model
  • X_位置和Y_位置描述空间对象在XY平面中的位置
  • 运动模型是描述空间对象在XY平面上运动的对象。此字段初始化为空[],因此可以定义或取消定义
  • 当未定义“移动”模型字段对象时,约定为X_位置和Y_位置是时不变的。通过编写pos=space\u obj.X\u pos隐式地获取这些属性
  • 定义“移动”模型字段对象时,惯例是X位置和Y位置随时间变化。但这一次,getter方法需要时间值/值与Movement_Model field对象结合,以计算在任何时刻的空间位置。所以我想要这样的东西:pos=space\u obj.X\u pos或pos=space\u obj.X\u pos(1)或pos=space\u obj.X\u pos([1:1:10]),但是Matlab getters不能有其他参数
  • 一种解决方案是将时间变量设置为空间对象的内部,但我有很强的设计约束,将时间变量设置为所有对象的外部
  • 另一种解决方案是使用一个函数代替名为Get_X_Pos的getter,但我希望与其他静态对象保持一致(对于这些静态对象,X_Pos和Y_Pos是时不变的)。我希望避免像space_obj.Get_X_Pos(1)和other_obj.X_Pos这样的混合签名。但这意味着我需要为所有其他对象编写Get_X_Pos函数,即使它不是必需的
这里的问题是由一个具有外部依赖性的类属性给出的。因此,我的问题是:

  • 为什么Matlab不允许getter方法使用其他参数?这个需求是否与一些OOP范例相冲突?为什么?
  • 我怎样才能优雅地解决这个问题?也许需要重新设计。。。 不管怎么说,我的问题似乎微不足道,但我正在寻找最佳实践/设计,因为我的项目将随着时间的推移而变得越来越大。非常感谢您的帮助! 谢谢
带有一个(或多个)参数的
getter
方法不再是经典的
getter
方法-它只是一个普通的方法

使用普通方法,您可以实现两个用例:

function x_pos = X_Pos(this, t)
    if nargin < 2
        % handle space_obj.X_Pos case
    else
        % handle space_obj.X_Pos(1) case
    end
end

不过,我个人倾向于将其分为两部分,以明确区分两者。例如,对该属性的“静态”版本使用
X0_Pos
或类似的东西,并将
X_Pos
作为时间相关版本。在这种情况下,您可以使用从属属性为
静态对象X0\u位置返回
静态对象X0\u位置(0)

function x0_pos = X0_Pos(this)
    x0_pos = this.X_Pos(0);
end

但有一个问题:如果有一个名为X_Pos的属性,则不能有一个具有此名称的方法!我想,当你写obj.X_Pos时,全班同学都不知道你问的是哪一个。谢谢你抽出时间!当然可以。我不是建议使用方法和属性,而是使用方法而不是属性。由于调用无参数方法在语法上与访问属性完全相同,因此不会造成任何伤害。
x_at_t1 = space_obj.X_Pos(t1)
function x0_pos = X0_Pos(this)
    x0_pos = this.X_Pos(0);
end