仅在从未分配过变量的情况下,才如何声明/分配变量?

语境:

我试图找到使函数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可以,但是仍然不好。

最佳答案

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

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

如果要使变量存在于工作空间中,但处于未定义状态,则可以分配nan(而不是数字),然后使用isnan进行检查。这将与您提出的解决方案相似,其值类型明确不会与该变量的任何有效值冲突。

10-08 01:43