ローカル変数を明示的に指定するには?

解決


ゆうこ  2005-12-02 04:54:12  No: 18975

with句内でwith句内にもあるローカル変数を明示的に
指定する方法はありますでしょうか?

例えば

type
  TKouzoutai=record
    a:Integer;
  end;

procedure TForm1.Kansu(Sender: TObject);
var
 a:Integer;
 Kouzoutai:TKouzoutai;
begin
 with Kouzoutai do
 begin
  // この中でローカル変数aにアクセスする方法??
  // ※自クラス内の変数aにアクセスする場合→Self.a
  // ※グローバル変数aにアクセスする場合→ユニット名.a
 end;
end;

宜しくお願いします。


りおりお  2005-12-02 07:30:38  No: 18976

TKouzoutai のフィールドとかぶってないなら、たんに a では?
かぶってるんなら、with を使ってはいけません。間違いのもとです。


ぬの  2005-12-02 17:33:54  No: 18977

>  // この中でローカル変数aにアクセスする方法??
自分の知る限り、なし

調べた限りでは、「限定付き識別子」ということで、ユニット名やSelf、
クラス名等を指定することができますが、
関数内のローカル変数に対する識別子はないようです。

もっと調べるなら、スコープとか識別子あたりがキーワードかな?


ゆうこ  2005-12-02 18:29:06  No: 18978

りおりおさん、ぬのさんありがとうございます。
ローカル変数は一番優先されるみたいなので明示的に指定する方法はないようですね。
りおりおさんの仰るようにwith句は使用しない方向で考えます。

ちなみに下記のようなことを考えていました。
--------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
 a:Integer;
 b:Integer;
 c:Integer;
 d:Integer;
begin
  { 省略 }

  NanikashiraTabel.NanikashiraMember.NanikashiraColumn.a = a
  NanikashiraTabel.NanikashiraMember.NanikashiraColumn.b = b
  NanikashiraTabel.NanikashiraMember.NanikashiraColumn.c = c
  NanikashiraTabel.NanikashiraMember.NanikashiraColumn.d = d

// ↑これだと面倒なのでNanikashiraTabel.NanikashiraMember.NanikashiraColumnを
//   with句で囲いたい!

  with NanikashiraTabel.NanikashiraMember.NanikashiraColumn do
  begin
    a := ローカル.a
    b := ローカル.b
    c := ローカル.c
    d := ローカル.d
  end;
// ↑このようなことがやりたかった・・・

end;

というものでした。


りおりお  2005-12-02 19:42:41  No: 18979

var
  N: TNanikashiraColumn;

として変数を宣言しておき

N := NanikashiraTabel.NanikashiraMember.NanikashiraColumn;

N.a := a;

などとしたらよいのでは?


ある意味明示的  2005-12-02 19:42:56  No: 18980

ローカル変数の名前をlocal_aなどに変更してみては?


ぬの  2005-12-02 19:50:29  No: 18981

ちょっと譲歩して・・・
  with NanikashiraTabel.NanikashiraMember do
  begin
    NanikashiraColumn.a := a
    NanikashiraColumn.b := b
    NanikashiraColumn.c := c
    NanikashiraColumn.d := d
  end;

とか・・・(^^ゞ


ゆうこ  2005-12-02 20:26:51  No: 18982

りおりおさん、ある意味明示的さん、ぬのさんありがとうございます。
解決策案を記しておきます。

その1.長い変数名の変数を別の短い変数名の変数に代入し操作する。
        (りおりおさん案)
その2.長い変数名を別名に置き換える。
        ※ポインタで操作し変数の実体は変わらず
その3.ローカル変数には同じ変数名を使用しない。(ある意味明示的さん案)
その4.我慢する。

※ぬのさん案は3.と4.の合併ですかね。

現在は4.で我慢してます。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加