【问题标题】:How to use a cell array with variable depth as input of a function如何使用具有可变深度的元胞数组作为函数的输入
【发布时间】:2015-07-09 14:25:43
【问题描述】:

我有一个全局元胞数组,其中数据存储在具有可变深度的结构中。假设它具有以下结构:

global table
table{1,1}.data
table{1,2}.sub{1,1}.data
table{1,2}.sub{1,2}.data
table{1,3}.sub{1,1}.sub{1,1}.data
table{1,3}.sub{1,1}.sub{1,2}.data

现在,我想定义一个可以更改table 变量数据的函数。问题是,当我使用例如table{1,2}.sub{1,2} 作为函数的输入并让我的函数更改数据时,原始table 变量中的数据不会更改。 草图:

%function
function changedata(region)
    region.data='banana';
end
%main
changedata(table{1,2}.sub{1,2});

(我还没有找到关于这个问题的信息。)

【问题讨论】:

  • table{1,2}.sub{1,2} 不是指向元素的指针,而是其数据的副本(按值调用)。这就是为什么在函数中写入它时它不会改变。
  • 没错。如果结构是table{1,2,1,2} 的形式,你可以在函数中使用varargin 并写成table{varargin{:}}。我有构建一个字符串的想法(例如table{1,2}.sub{1,2}),但我不知道你是否可以使用它来存储新数据。

标签: arrays matlab function global-variables cell


【解决方案1】:

您可以在输出中使用相同的参数

%function
function region = changedata(region)
    region.data='banana';
end

%main
table{1,2}.sub{1,2} = changedata(table{1,2}.sub{1,2});

否则你需要一个句柄类作为Matt mentioned in the comments

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2011-08-26
    • 2017-05-03
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2021-03-13
    相关资源
    最近更新 更多