掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
関数で値を二つ戻すには? (ID:20718)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
軽く説明します。 レコード ■record .. 古くからPASCALにある型で、Cの構造体のようなもの。 interface部で type TMyRecord = record a1: integer; a2: integer; end と定義しておけば、 TForm1 = class 省略 function MyFunction: TMyRecord; end; implementation部 function TForm1.MyFunction: TMyRecord; begin Result.a1:=0; Result.a2:=1; end; 使う時 var MyRec: TMyRecord; begin MyRec:=MyFunction; ShowMessage( IntToStr(MyRec.a1)); ShowMessage( IntToStr(MyRec.a2)); あるいは ShowMessage( IntToStr( MyFunction.a1)); ShowMessage( IntToStr( MyFunction.a2)); ただし、後者の場合、関数が2回呼ばれます。 ので、通常レコードは、値をコピーして操作したほうが良いでしょう。 ■var 下記のようにパラメータに var をつけると、 関数の呼び出しもとで、値を再取得できるようになります。 procedure MyProcedure( var a1,a2: integer); begin //a1,a2の値に応じて a1,a2 を再設定できます。 if a1=0 then a1:=1; if a2=1 then a2:=2; end; var a,b: integer; begin a:=0; b:=1; //a,b の値は関数内部からも参照できます。 MyFunction(a,b); //この位置で MyFunctionが操作した a,b の値が取得できます。 end; ■out outは、varのように値を返せますが、呼び出し時に渡した値が 関数内部で読めることが保証されません。 procedure MyProcedure( out a1,a2:integer); begin // a1の値は不定です。 if a1=1 then begin //ので、このような処理は書いても動作が保証されません。 a1:=2; end; end; var a:integer; begin a:=1; //この指定は無効 MyProcedure(a); //この位置で a の値は取得できます。 end; こんなところで、いいでしょうか。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.