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
如何用不同的数据类型在matlab中声明持久变量_Matlab_Function_Global Variables - Fatal编程技术网

如何用不同的数据类型在matlab中声明持久变量

如何用不同的数据类型在matlab中声明持久变量,matlab,function,global-variables,Matlab,Function,Global Variables,是否可以使用任意数据类型在MATLAB函数中创建持久变量?例如,我想在我的MATLAB函数中创建一个持久的containers.Map变量。我该怎么做 所有使用persistent关键字定义为persistent的变量都初始化为double数据类型的空数组。通过使用isempty检查它们是否为空,然后执行初始化,可以将它们重新初始化为所需的任何数据类型。您还可以检查以确保它是一个双对象,以防如果您有一个空的containers.Map对象,您不想强制重新初始化 function persist(

是否可以使用任意数据类型在MATLAB函数中创建持久变量?例如,我想在我的MATLAB函数中创建一个持久的
containers.Map
变量。我该怎么做

所有使用
persistent
关键字定义为persistent的变量都初始化为
double
数据类型的空数组。通过使用
isempty
检查它们是否为空,然后执行初始化,可以将它们重新初始化为所需的任何数据类型。您还可以检查以确保它是一个
对象,以防如果您有一个空的
containers.Map
对象,您不想强制重新初始化

function persist(key, value)
    persistent container

    if isa(container, 'double') && isempty(container)
        container = containers.Map();
    end

    container(key) = value;
end

使用
persistent
关键字定义为persistent的所有变量都初始化为
double
数据类型的空数组。通过使用
isempty
检查它们是否为空,然后执行初始化,可以将它们重新初始化为所需的任何数据类型。您还可以检查以确保它是一个
对象,以防如果您有一个空的
containers.Map
对象,您不想强制重新初始化

function persist(key, value)
    persistent container

    if isa(container, 'double') && isempty(container)
        container = containers.Map();
    end

    container(key) = value;
end

MATLAB类属性可以用于此目的,因为它们可以限制为特定的数据类型。例如:

classdef foo
    properties
        prop@char scalar = 'A'  % will only accept char inputs, not numeric 
    end
end
如果提供的值类型不正确,则尝试更新this.prop的每个方法都将失败。如果更新成功,您也可以更新
持久变量

正式并入R2017a,但未记录


有关进一步的阅读,请参见。

MATLAB类属性可用于此,因为它们可以限制为特定的数据类型。例如:

classdef foo
    properties
        prop@char scalar = 'A'  % will only accept char inputs, not numeric 
    end
end
如果提供的值类型不正确,则尝试更新this.prop的每个方法都将失败。如果更新成功,您也可以更新
持久变量

正式并入R2017a,但未记录


进一步阅读请参见。

非常简单!谢谢:-)太简单了!谢谢:-)谢谢你的酷功能!不知道这是可能的。另一方面,我不认为它在我的用例中会非常有用,但很高兴知道:)谢谢你的酷功能!不知道这是可能的。另一方面,我不认为它在我的用例中非常有用,但很高兴知道:)@Dev iL我真的不想强制执行任何数据类型,我只希望函数中的持久变量是某种类型。没有什么需要强制执行的,因为没有人可以在函数中“设置”变量,它只是用于记忆目的。也许我们对“任意”一词的理解不同。当你说你想要一个“任意”的数据类型时,这是默认的MATLAB方式,其中一个具有特定名称的变量可以被分配任何你想要的。如果您希望它属于特定类别(例如,
double
char
等)-数据类型不再是任意的!,但是非常具体(或者我说是“强制的”)。当然,您可以自由地处理您的问题,但我认为我的编辑有助于更好地澄清意图。@Dev iL当然,在我实例化它之后,数据类型不再是任意的;关键是,它是先验的任意性。另外,当我使用“持久性”时,matlab会将对象实例化为双精度对象。所以我的问题是:我怎样才能使matlab将这些对象实例化为我选择的特定数据类型?任意的先验,特定的后验(在实例化之后)@Dev iL我觉得强制执行不是正确的术语,因为这意味着有人试图更改数据类型,而matlab拒绝了更改;这就是你的答案。同样,非常酷的功能,但不是我问的:)你能解释一下你的用例吗?我看不出你所做的有什么好处。当永久变量为空时,您是否可以通过将您想要的任何内容赋给该永久变量,从而指定其类型a posteriori来实现相同的效果?@Dev iL我并不真的想强制执行任何数据类型,我只希望函数中的永久变量为某种类型。没有什么需要强制执行的,因为没有人可以在函数中“设置”变量,它只是用于记忆目的。也许我们对“任意”一词的理解不同。当你说你想要一个“任意”的数据类型时,这是默认的MATLAB方式,其中一个具有特定名称的变量可以被分配任何你想要的。如果您希望它属于特定类别(例如,
double
char
等)-数据类型不再是任意的!,但是非常具体(或者我说是“强制的”)。当然,您可以自由地处理您的问题,但我认为我的编辑有助于更好地澄清意图。@Dev iL当然,在我实例化它之后,数据类型不再是任意的;关键是,它是先验的任意性。另外,当我使用“持久性”时,matlab会将对象实例化为双精度对象。所以我的问题是:我怎样才能使matlab将这些对象实例化为我选择的特定数据类型?任意的先验,特定的后验(在实例化之后)@Dev iL我觉得强制执行不是正确的术语,因为这意味着有人试图更改数据类型,而matlab拒绝了更改;这就是你的答案。同样,非常酷的功能,但不是我问的:)你能解释一下你的用例吗?我看不出你所做的有什么好处。当持久变量为空时,是否可以通过将所需的内容赋给持久变量,从而指定其类型a posteriori来实现相同的效果?