|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
delphi left side cannot be assigned to при обработке record
Я тут наткнулся на проблему и нашел как ее решить. Есть следующий код:
Код:
type TRec = record a:string; b:integer; end; TClass = class private FRec:TRec; public property Rec:TRec read FRec write FRec; {конструкция read GetRec write SetRec тоже не решает проблему} end; *** Procedure proc; C:TCalss; begin C := TClass.Create; {На две следующие строчки компилятор ругается вот таким текстом left side cannot be assigned to} C.Rec.a := 'string'; C.Rec.b := 5; end; Решается 2-мя путями. 1: Код:
Procedure proc; C:TCalss; R:TRec; begin C := TClass.Create; R.a := 'string'; R.b := 5; C.Rec := R; end; Код:
Procedure proc; C:TCalss; begin C := TClass.Create; with C.Rec do begin a := 'string'; b := 5; end; {Видимо, конструкция with сама по себе работает так же, как 1-й вариант, то есть работает с record целиком (принимает и отправляет)} end; Может, это вообще обходится другими способами, более правильными, но мне они неведомы. |
#2
|
|||
|
|||
Вот эта запись
Код:
property Rec:TRec read FRec write FRec; |
#3
|
||||
|
||||
Вася, я ж проверил. Все пашет. Даже к with комментарий написал с предположением, почему оно пашет. )
Я даже больше скажу. Угадай, что выведет такой код: Код:
TRec = record a:string; b:integer; end; *** procedure Proc; var R:TRec; begin R.a := 'qwe'; R.b := 1; with R do begin a := 'asd'; b := 2; showmessage(R.a + IntToStr(R.b)); end; end; А вот этот код Код:
TRec = record a:string; b:integer; end; *** procedure Proc; var R:TRec; begin R.a := 'qwe'; R.b := 1; with R do begin a := 'asd'; b := 2; showmessage(a + IntToStr(b)); end; end; Код:
TRec = record a:string; b:integer; end; *** procedure Proc; var R:TRec; begin R.a := 'qwe'; R.b := 1; with R do begin a := 'asd'; b := 2; end; showmessage(R.a + IntToStr(R.b)); end; Последний раз редактировалось morebeauty, 29.11.2012 в 10:02. |
#4
|
||||
|
||||
Вот тут тож советуют или with или переделать record в класс, что на мой вгляд более правильно.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
||||
|
||||
Думаю, прежде чем оценивать более/менее правильно, следует разобраться как устроен блок with. А то может оба способа просто напросто идентичны? )
|
#6
|
||||
|
||||
Объект от записи отличаются принципиально, т.к. Delphi объектно-ориентированный язык - то правильнее оперировать объектами.
Далее в холиваре не участвую. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |