よく分からない現象に出会ったので質問です。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■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★4 [煮卵★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★10 [ぐれ★]
- 高市コイン、155円突破wwwwwwwwww [246620176]
- 【高市速報】ユーロ円180円突破。史上初 [931948549]
- 杉浦綾乃板って改名したほうがいいよな
- 高市早苗の中国問題、「オーバーツーリズムが解消されてウザい中国人が消えるから日本の勝ち」という風潮になってしまう [562983582]
- おじゃる丸をまったり待機するスレ🏡
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
