よく分からない現象に出会ったので質問です。Delphi 10.4.2で以下のコードが l.List[0].a := 200; の行でコンパイルエラーになり、
TInner.bの定義を例えばStringにすればコンパイルできるようになる。取得アクセサのあるレコード型プロパティは
戻り値はコピー渡しなのでそのメンバに直接代入しても無意味でStringで通る方がおかしいのかもしれないけど、
Listは動的配列で参照渡しなので、List[0]のメンバの変更はTListの中身をきちんと変更できると考えるとよく分からない。
また、関係ないメンバに型パラメータを使っているかいないかでコンパイル可否が変わるのは意図した仕様ではない可能性を感じる。
なぜこうなるか、分かる人がいたら教えてください。
ちなみにb: Tのままコンパイル通すのは、無理矢理だけど PInteger(@l.List[0].a)^ := 200; とすればResultに200が返ります。
ListではなくItemsプロパティの場合は戻り値がコピーなのでこれでもできないんですよね。(コンパイルは通るけどResultに100が返る)
uses System.Generics.Collections;
type TOuter<T> = class
type TInner = record
a: integer;
b: T; //ここを b: String;に変えるとコンパイル可
end;
function Test: Integer;
end;
function TOuter<T>.Test: Integer;
var
l: TList<TInner>;
t: TInner;
begin
l := TList<TInner>.Create;
t.a := 100;
l.Add(t);
l.List[0].a := 200; //ここでコンパイルエラー(E2064 代入できない左辺値です)
Result := l[0].a;
l.Free;
end;
探検
くだすれDelphi(超初心者用)その59【Embarcadero】
■ このスレッドは過去ログ倉庫に格納されています
155デフォルトの名無しさん
2021/12/09(木) 03:45:44.30ID:0lVX47qq■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- 【日銀総裁】賃金に上昇圧力 人手不足で労働市場逼迫 [蚤の市★]
- レーダー照射問題で日本のホットライン呼びかけに中国応じず…2023年3月に開設も機能せず [♪♪♪★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- 俺氏の借金の金額wwwwwwwwwwwwwwwwwwwwwwwwwww
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- ソープ待合室俺、緊張中WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- パスタに高い安いの差ある?
- 朝日新聞記者「中国軍のレーダー照射はこめかみに銃を突きつけられたのと同じ。僕なら反撃して撃墜してる」高市 [931948549]
- 年取るとオナニーしなくなるってマジ…?
