3

関数パラメータが未定義かどうかを確認するにはどうすればよいですか?

procedure Test(aValue: TObject);
begin
  if aValue <> nil then
    ShowMessage('param filled')      <-- also when Test() is executed!
  else
    ShowMessage('no param filled')   <-- not called, only when Test(nil) is called
end;

ただし、この関数がパラメーターなしの純粋なJSで呼び出されると、aValue = undefinedになりますが、<>nilチェックは==nullに変換されます。

たとえば、コールバック付きのJS関数がある場合:

type
  TObjectProcedure = procedure(aValue: TObject);

procedure FetchUrlAsync(aUrl: string; aCallback: TObjectProcedure )
begin
  asm
    $().load(@aUrl, @aCallback);
  end;
end;

この関数は次のコマンドで呼び出すことができます。

FetchUrlAsync('ajax/test.html', Test);

「Test」がパラメータで呼び出されるかどうかは、jQueryに依存するようになりました。

4

2 に答える 2

4

次のバージョンでは、 Defined()特殊関数を使用できるようになります。これにより、undefinedに対して厳密なチェックが行われます(null値の場合はtrueが返されます)。

if Defined(aValue) then
   ...

現在のバージョンでは、それをチェックする関数を定義できます

function IsDefined(aValue : TObject);
begin
   asm
      @result = (@aValue!==undefined);
   end;
end;
于 2012-05-23T06:23:32.440 に答える
0

現在のバージョン(1.0)では、関数varIsValidRef()を使用して、値が未定義かどうかを確認できます。この関数はw3system.pasの一部であるため、常に存在します。次のようになります。

function varIsValidRef(const aRef:Variant):Boolean;
begin
  asm
    if (@aRef == null) return false;
    if (@aRef == undefined) return false;
    return true;
  end;
end;

これにより、nullとundefinedの両方がチェックされるため、オブジェクト参照(タイプTHandleはバリアント)に対しても使用できます。

于 2012-06-06T16:27:10.740 に答える