よく分からない現象に出会ったので質問です。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■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪
- 維新議員、キャバクラマネー返金へ→「今回は返金する」「ポケットマネーでやるには限界がある」 [834922174]
- 朝日新聞記者「中国軍のレーダー照射はこめかみに銃を突きつけられたのと同じ。僕なら反撃して撃墜してる」高市 [931948549]
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 野党が“おこめ券”追及 高市早苗「鈴木農水大臣がお米券大好きなんよ」😹 [817148728]
- 晩ごはんどうしよう
