【发布时间】:2014-03-02 07:08:59
【问题描述】:
我想确保用户定义的 MATLAB 函数(包含在 m 文件中)的输入参数属于特定类型。我知道 MATLAB 会自动将数据类型分配给变量(某些人喜欢而另一些人对此感到沮丧),但我想知道 MATLAB 中是否有“严格数据类型”选项或类似的选项,尤其是用于用户定义函数的输入参数。
我在这两个网页上找到了关于 MATLAB 的“基本类”(数据类型)的有用解释:
http://www.mathworks.com/help/matlab/matlab_prog/fundamental-matlab-classes.html http://www.mathworks.com/help/matlab/data-types_data-types.html
但是,我一直无法找到严格数据类型问题的答案,尤其是对于函数输入参数。我认为这将是一个非常基本的问题,已经在很多地方得到了回答,但是经过广泛的搜索,我还没有找到一个决定性的答案。目前,我一直在使用 is[TYPE]() 函数手动检查数据类型,如果不符合则显示错误消息,尽管这看起来很草率,我希望我可以让 MATLAB 为我强制执行它。
下面是一个函数示例,我想在其中指定输入参数数据类型。它位于 MATLAB 当前路径中名为 strict_data_type_test.m 的文件中。在这个函数中,我想强制变量 yes_or_no 是 MATLAB 的 logical 数据类型。我知道我可以使用 islogical() 函数手动检查,但我的问题是是否可以让 MATLAB 为我强制执行它。我也知道任何非零双精度计算结果为真,零计算结果为假,但我想强制用户发送 logical 以确保错误的参数不是意外发送的,例如。这是示例函数:
function y = strict_data_type_test( x, yes_or_no )
% manual data type check can go here, but manual check is not desirable
if (yes_or_no)
y = 2 .* x;
else
y = -5 .* x;
end
end
在输入参数变量名称之前添加数据类型(就像在大多数编程语言中一样)将数据类型文本视为另一个变量名称而不是数据类型标识符。由此看来,无论如何,在 MATLAB 中严格的数据类型是不可能的,但也许你们中的许多大师都知道我无法找到的有用的技巧、特性或语法。
【问题讨论】:
-
答案是否定的。你所谓的
is[TYPE]()就是这样做的方法。或阅读inputParser类here。或者,如果您愿意,也可以编写mex函数。如果强制执行类型并且用户传入了错误的类型,您会发生什么? -
我同意其他人的观点,
inputParser是要走的路。有关摘要和简明示例,请参阅 here。 -
回应 horchler:我希望如果有类型强制并且用户从控制台传入了错误的类型,那么会发生错误(无需我在函数),更重要的是,如果用户在另一个脚本或函数中键入函数调用,那么 MATLAB 会将函数调用突出显示为错误,向用户显示它是不正确的,而无需运行脚本/函数(“编译器强制执行” )。