6

仅当以前从未分配过变量时,如何声明/分配变量?

语境:

我试图找到使 k 的函数 calculateSomeDistance(k) 最小化的 k。最小距离和相应的 k 值应该可用(即在范围内)以供以后使用。我应该如何声明 minDistance 以便在将其与当前计算的距离进行比较之前检查它是否已经初始化?

% How should I declare minDistance?
minDistance=undefined; % Doesn't exist.
for ki=1:K,
  distance=calculateSomeDistance(ki);
  if(isUndefined(minDistance) || distance < minDistance)
    minDistance = distance;
    minK = ki;
  end
end
% Here minK and minDistance must be in scope

有没有办法为 matlab/octave 中的变量分配一个空值/未定义值,然后对其进行测试以进行第一次有效分配?

PS:将 minDistance 初始化为一个非常大的数字非常难看,而不是我想要的。

当 ki 为 1(即第一次通过)时初始化 minDistance 是可以的,但仍然不是很好。

4

1 回答 1

10

您可以使用存在检查变量是否存在:

if ~exist('minDistance','var')
    minDistance = initValue;
end

如果您想让变量存在于工作区中,但处于未定义状态,您可以分配nan(不是数字)并使用isnan. 这将类似于您提出的解决方案,其值类型明确不会与变量的任何有效值冲突。

于 2012-08-03T15:22:36.557 回答