在C中,我可能会这样做:
#define MAGIC_NUMBER (88)
int foo(int a, int b, int c) {
return a + b + c + MAGIC_NUMBER;
}
double bar(double x, double n) {
return x + n + MAGIC_NUMBER;
}
/*
* ...and so on with many kind-of-long functions using
* MAGIC_NUMBER instead of writing a literal 88 like so:
*/
double bar(double x, double n) {
return x + n + 88;
}
我应该在Matlab中做什么? (需要跨多个文件工作。)
答案 0 :(得分:5)
您可以定义global variable 或声明一个只返回一个常量值的函数(第二种可能性看起来更好)。
答案 1 :(得分:2)
目前没有真正好的答案。如果您只想定义在工作区中看到的简单变量,那么
f00 = 88;
显然有效。但是在其他功能中不会出现这种情况。因此,您可以将其定义为全局变量,但是您需要在每个需要它的函数内将每个变量声明为全局变量。对我来说,这似乎是一个蠢货。稍微好一点的恕我直言,就是为foo定义一个函数m文件。
function returnvalue = f00
% returns the scalar value of 88
returnvalue = 88;
(请注意,我在这里有一个注释行。当你调用help foo时会返回此信息,lookfor也会看到该行。建议使用比这更好的帮助,但我现在感觉很懒。)
只要foo.m在你的搜索路径上,那么这总是返回值88.注意我没有包含任何参数。但是你可能更有创意,也许允许一个大小参数,这样foo(N)的行为就像零,一个和眼睛一样。这是在这里使用函数的好处。它可以完全按照您的意愿行事。所以也许......
function returnvalue = f00(varargin)
% returns the scalar value of 88, or replicated elements if a size is supplied
% usage: foo
% usage: foo(N)
% usage: foo(N1,N2,...)
%
% arguments:
% N - a scalar or vector that denotes the number
% of repeated elements (all 88) to be generated
%
% returnvalue - a scalar (or vector/array) of
% size indicated by N.
%
% see also: ones, zeros, eye
if (nargin == 0)
% no arguments, so return a scalar 88
returnvalue = 88;
elseif (nargin == 1) && isscalar(varargin{1})
% be consistent with ones, zeros, eye, etc.
returnvalue = repmat(88,[varargin{1},varargin{1}]);
elseif (nargin == 1)
% the size is a vector already
if isvector(varargin{1})
returnvalue = repmat(88,varargin{1});
else
error('FOO:impropersize','Size argument cannot be a general array')
end
elseif
% nargin must have been more than 1
returnvalue = repmat(88,cell2mat(varargin));
end
我可能会在上面做一些更好的错误检查,但你应该得到一般的想法。
答案 2 :(得分:1)
我是AB的第二个响应,声明一个只返回一个常量值的函数。
另一种可能性就是#define你想要的任何东西,并使用cpp预处理.m文件。然而,你失去了Matlab开发的交互性。
答案 3 :(得分:1)
像AVB这样的本地函数说的很好,使用persistent变量而不是全局变量可以更耐用。持久变量不能被m文件编辑或看到任何内容,所以它更像是在.c文件的顶部使用#define。
function ver = version( ver )
% #define version = 'something'
% returns '' if not set since last time m file was edited, els persistently
% returns the last value set
persistent ver_;
if nargin
ver_ = char(ver); % garentee the data type
else
ver_ = char(ver_); % garentee the data type
end
ver = ver_;
end
父函数中的第一行将设置版本
version('6.00'); % version number of the current converter
在同一个.m文件中的任何地方我想使用这个#define等价物,我可以像变量一样引用它。
myMat.convertVersion = version