Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

D2006 - неверная подсказка для классовых методов   Найти похожие ветки 

 
bss   (2010-05-11 18:33) [0]

Когда обращаешься к классовому методу через сам класс (а не экземпляр) дельфя подсказывает неверную конструкцию, требуя передать Self. Который на самом деле в виде "nil" передается неявно и вызов составленный по "подсказчику" не скомпилируется. Такие подсказки путают и раздражают, пример:

http://s50.radikal.ru/i130/1005/49/2db8b3fb80e1.jpg

Хотя метод объявлен вот так:
http://s51.radikal.ru/i134/1005/4c/1415227d400b.gif

Стоит D2006 + Update 2.
Собственно, можно ли на данной версии это вылечить?


 
Кто б сомневался ©   (2010-05-11 18:47) [1]


> Такие подсказки путают и раздражают, пример:


Как и они могут путать не пойму, если ты сам и пишешь же в коде TMyClass.MyMethod .?


 
_Юрий ©   (2010-05-11 18:58) [2]

Это далеко не самое суровое из того, что раздражает


 
Игорь Шевченко ©   (2010-05-11 19:25) [3]

почему ты пишешь здесь, а не в Quality Central ?


 
bss   (2010-05-11 20:19) [4]


> если ты сам и пишешь же в коде TMyClass.MyMethod .?

видимо, следует перечитать топик


> Это далеко не самое суровое из того, что раздражает

интересный подход.

В общем, вопрос в том, знает ли кто как победить этот баг.


 
Плохиш ©   (2010-05-11 20:57) [5]

В моей d2006 такого класса нет.


 
Кто б сомневался ©   (2010-05-11 21:39) [6]


> > если ты сам и пишешь же в коде TMyClass.MyMethod .?
>
> видимо, следует перечитать топик


Я все правильно понял.
Ты же прежде чем писать конструкцию TMyClass.MyMethod  должен выяснить классовый ли это метод или нет? Либо вспомнить, либо посмотреть.
А потом уже ручками набирать на клавиатуре TMyClass.MyMethod .
Т.е. если это метод класса тогда ты должен написать TmyClass иначе писать через ссылку.
Но почему так мучает хинт-то не понятно? Если он не играет здесь роли.


 
Игорь Шевченко ©   (2010-05-11 23:09) [7]

Плохиш ©   (11.05.10 20:57) [5]

Набери TObject. выбери любой метод и посмотри подсказку.


 
bss   (2010-05-12 11:20) [8]


> Но почему так мучает хинт-то не понятно?

перечитай, пожалуйста, топик еще раз. Особое внимание обрати на скриншоты.


> Набери TObject. выбери любой метод и посмотри подсказку.

ну в общем да )) Я просто скрин сделал на примере своего класса. Это лечится?


 
bss   (2010-05-12 11:23) [9]


> Но почему так мучает хинт-то не понятно? Если он не играет
> здесь роли.

я вроде достаточно четко написал в топике... Речь как раз о том, что хинт НЕПРАВИЛЬНЫЙ. Это не смертельно, компилируется все верно, но хинт-подсказка вылазят неверные, понимаешь? Сам хинт неправильный, дело в том, что хинт выдает ошибочную подсказку. Именно об этом я говорю.


 
Плохиш ©   (2010-05-12 12:10) [10]


> Игорь Шевченко ©   (11.05.10 23:09) [7]

Ах вон вы про что.

> bss   (12.05.10 11:23) [9]


> Сам хинт неправильный, дело в том, что хинт выдает ошибочную
> подсказку.

В хинт для классовых методов добавили первым пунктом неявную переменную self, по какой-то только разработчикам известной причине, все остальные параметры соответствуют действительности, так что тут неправильного. Зато теперь можно по хинту сразу узнать классовый метод или нет.

В общем-то поддерживаю вопрос Игорь Шевченко ©   (11.05.10 19:25) [3]

PS. А в последней версии это изменили? Если нет, то выходит полезная фича для большинства разработчиков.


 
bss   (2010-05-12 13:33) [11]

я не против, если вызов классового метода через сам класс как-то обозначался по особому. Но тут именно явный баг.

Особенно, учитывая выделение жирным текущего заполняемого параметра - это сбивает с толку. Например, если в методе 5 аргументов, ты пишешь передачу четвертого параметра, а по подсказке выходит, что третий... Сбивает.


 
Игорь Шевченко ©   (2010-05-12 16:22) [12]

Плохиш ©   (12.05.10 12:10) [10]


> PS. А в последней версии это изменили?


в Delphi 2010 правильный хинт, без параметра self: class of ...

bss   (12.05.10 13:33) [11]

http://qc.embarcadero.com + поиск


 
Плохиш ©   (2010-05-12 16:39) [13]

Вот и ладушки, вот и разобрались :-)) В 11й версии исправили.


 
Кто б сомневался ©   (2010-05-12 17:33) [14]


> я вроде достаточно четко написал в топике... Речь как раз
> о том, что хинт НЕПРАВИЛЬНЫЙ. Это не смертельно, компилируется
> все верно, но хинт-подсказка вылазят неверные, понимаешь?
>


bss я просто удивляюсь твоему упорству. Зачем здесь нужен хинт, если ты до хинта уже знаешь что данный метод классовый?


 
Кто б сомневался ©   (2010-05-12 17:36) [15]


> в Delphi 2010 правильный хинт, без параметра self: class
> of ...


2009 тоже. Возможно в 2007 также.


 
turbouser ©   (2010-05-12 17:47) [16]


> Кто б сомневался ©   (12.05.10 17:36) [15]

В 2007 - нормально.


 
bss   (2010-05-13 11:00) [17]


> Зачем здесь нужен хинт, если ты до хинта уже знаешь что
> данный метод классовый

Нда... То есть, ты считаешь, что хинт нужен только для того, чтобы понять - классовый метод или нет. Ясно. У нас совершенно разные представления о том, зачем нужен хинт по параметрам функции/метода.


 
bss   (2010-05-14 16:18) [18]

Кстати, я ошибся с фразой:

>Когда обращаешься к классовому методу через сам класс (а не экземпляр)

на самом деле это неважно. Можно обращаться хоть через экземпляр, хоть через сам класс. Подсказка неправильная, если метод классовый. На примере:

http://s45.radikal.ru/i109/1005/d9/ec1394b0aa40.jpg


 
vuk ©   (2010-05-14 21:03) [19]

to bss   (11.05.10 18:33) :

> Который на самом деле в виде "nil" передается неявно

Бред.


 
bss   (2010-05-14 21:58) [20]

в смысле, я хотел сказать, что передается неявно ссылка не на экземпляр класса, а ссылка на сам класс ))


 
Плохиш ©   (2010-05-14 23:33) [21]


> bss   (14.05.10 16:18) [18]

Сказали же уже, что исправили, что ты всё плакать продолжаешь? Сбегай на помойку за новой версией.


 
bss   (2010-05-17 10:51) [22]

хочется найти решение для D2006 именно. Покупать новую версию и переводить все проекты пока желания нету.


 
Игорь Шевченко ©   (2010-05-17 11:19) [23]


> хочется найти решение для D2006 именно


ты читать не умеешь ?
http://qc.embarcadero.com + поиск


 
bss   (2010-05-17 12:58) [24]

читать умею, искать не умею. Не нашел такую проблему


 
bss   (2010-05-24 10:27) [25]

она все таки как-то решается?


 
Игорь Шевченко ©   (2010-05-24 10:51) [26]

bss   (24.05.10 10:27) [25]

Здесь - никак


 
oxffff ©   (2010-05-24 11:10) [27]

Все показывается правильно.


 
bss   (2010-05-25 12:19) [28]

oxffff, мне кажется я понимаю с какой целью ты хочешь пофлеймить и защитить дельфи. Но вот картинка:

http://s50.radikal.ru/i130/1005/49/2db8b3fb80e1.jpg

Особое внимание в подсказке обрати на жирный шрифт, который как известно подсвечивает тот параметр, который сейчас нужно вводить в редакторе.

Продолжаешь считать, что все показывается верно?


 
oxffff ©   (2010-05-25 12:25) [29]


> bss   (25.05.10 12:19) [28]


Ты хочешь чтобы подсвечивался второй параметр?


 
oxffff ©   (2010-05-25 12:30) [30]

Заголовок темы

D2006 - неверная подсказка для классовых методов

Верная подсказка - указана полная сигнатура вызываемого участка кода.
Что касаемо подсветки текущего параметра, то тогда и пиши что тебе не нравиться корректно в своем вопросе.


 
oxffff ©   (2010-05-25 12:31) [31]


> нравиться


нравится


 
bss   (2010-05-25 12:36) [32]


> Ты хочешь чтобы подсвечивался второй параметр?

а ты считаешь, что сейчас подсвечивается все верно? Ты сам то пробовал код писать так? Если у тебя D2006 и есть эта ошибка - попробуй, сбивает жутко...

Я не против даже может быть, если бы дельфи каким-то образом обозначала передачу неявного параметра. Но не в виде, что как будто я должен передать этот параметр.

И в целом, если ты считаешь, что дельфи показывает все верно - а значит ты считаешь верным отображать передачу неявного параметра, то почему же при вызове методов экземпляра класса не отображается передача неявного параметра на структуру экземпляра класса? Точно также первым передается неявный параметр... В одном случае отображается, в другом нет. Как ни крути, где-то дельфи ошибается ))


 
bss   (2010-05-25 12:38) [33]


> Верная подсказка - указана полная сигнатура вызываемого
> участка кода.

за попытку защитить дельфи - спасибо.

Ответь тогда на один вопрос - почему при вызове методов экземпляра класса не пишется:


> полная сигнатура вызываемого участка кода

если это по-твоему так правильно.


 
oxffff ©   (2010-05-25 12:51) [34]

Может аргументируешь свое утверждение?


> D2006 - неверная подсказка для классовых методов


Для тебя есть разница между?

1. D2006 - неверная подсказка для классовых методов
2. И например неверно указан текущий параметр при вызове в подсказке.


 
Игорь Шевченко ©   (2010-05-25 13:25) [35]

oxffff ©   (25.05.10 12:51) [34]

Ну подсказка-то неверная. Она показывает не то число параметров, которое следует передавать в метод


 
oxffff ©   (2010-05-25 14:17) [36]


> Игорь Шевченко ©   (25.05.10 13:25) [35]
> oxffff ©   (25.05.10 12:51) [34]
>
> Ну подсказка-то неверная. Она показывает не то число параметров,
>  которое следует передавать в метод


Именно то число параметров.
Неявный параметр является таким же обычным параметром.
Большинство языков программирования разделяют код метода между экземплярами, поэтому требуя передачи неявно self параметра.

А вот если бы каждый метод генирировался на каждый экземпляр, то тогда параметров было бы на один меньше(действительно существовали такие ООП языки), например makeobjectinstance является таким примером.

Но тут Вы можете возразить, что речь идет о видимых параметрах. :)
Тогда естественно я отвечу значит есть и невидимые и попрошу дать  определение. Все так говорится дело привычки.

Здесь все дело в различном трактовании сигнатуры метода.


 
Игорь Шевченко ©   (2010-05-25 14:21) [37]

oxffff ©   (25.05.10 14:17) [36]


> Неявный параметр является таким же обычным параметром.


Ну подставь его согласно подсказке


 
oxffff ©   (2010-05-25 14:26) [38]


> Игорь Шевченко ©   (25.05.10 14:21) [37]
> oxffff ©   (25.05.10 14:17) [36]
>
>
> > Неявный параметр является таким же обычным параметром.
>  
>
>
> Ну подставь его согласно подсказке


[30] и [34]


 
Игорь Шевченко ©   (2010-05-25 15:19) [39]

oxffff ©   (25.05.10 14:26) [38]

Ты не подставил. А зря. Попробуй, тебе понравится


 
oxffff ©   (2010-05-25 15:49) [40]


> Игорь Шевченко ©   (25.05.10 15:19) [39]
> oxffff ©   (25.05.10 14:26) [38]
>
> Ты не подставил. А зря. Попробуй, тебе понравится


Рекомендую Вам книгу по теории типов языков программирования.
Тогда и вопросов будет меньше. :)


 
bss   (2010-05-25 16:02) [41]

oxffff, я не понимаю твою точку зрения.

Ты считаешь, что в подсказке должны быть перечислены все параметры (включая передающиеся неявно) или только явно передающиеся? Ты определись.

1) Если ты считаешь, что параметры должны быть перечислены все - то почему тогда при вызове методов через экземпляр неявный параметр не отображается?

2) если ты считаешь, что параметры должны перечисляться только явно передающиеся - то почему при вызове методов через прототип класса видны неявные параметры?


 
oxffff ©   (2010-05-25 16:07) [42]


> bss   (25.05.10 16:02) [41]


Я считаю что тебе стоит задавать вопросы корректно.


 
Игорь Шевченко ©   (2010-05-25 16:35) [43]

oxffff ©   (25.05.10 15:49) [40]

В ветке речь идет не о книге, а о вполне конкретном поведении подсказки. Неверном поведении.

Рекомендую книгу: Толковый словарь русского языка.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.097 c
11-1221682651
siealex
2008-09-18 00:17
2010.08.27
KOL и Windows Mobile


2-1272475993
DROWSY
2010-04-28 21:33
2010.08.27
редактирование в гриде.


2-1268605992
Дмитрий
2010-03-15 01:33
2010.08.27
отправка пакета ( TcpClient )


4-1233845602
niro
2009-02-05 17:53
2010.08.27
Эмулирование действий пользователя в MSIE


15-1265614586
Andy BitOff
2010-02-08 10:36
2010.08.27
Крик души в чате.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский