
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.5] |
![]() |
|
Страницы: (117) « Первая ... 19 20 [21] 22 23 ... 116 117 ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#301
,
|
|
Profi, boost.org
|
Сообщ.
#302
,
|
|
|
Зачем целиком? Достаточно и этого, чтобы охарактеризовать то, что Делфи с программистам делает. Не со всеми, конечно, некоторые находят в себе силы сопротивляться - собственно, этому сопротивлению и посвящен остаток той недосказанной цитаты. |
![]() |
Сообщ.
#303
,
|
|
Цитата archimed7592 @ Profi, boost.org А-а, ну понятно! Опять template! Ладно, сейчас что-нибудь придумаем. |
![]() |
Сообщ.
#304
,
|
|
Цитата Profi @ да так, чтобы это было универсально (можно подсунуть любой итератор) и чтобы связывалось всё это на этапе компиляции... сомневаюсь Ладно, сейчас что-нибудь придумаем. ![]() Добавлено прелесть в том, что в эту ф-цию можно засовывать любой объект отвечающий требованиям, определённым для InputItertator, даже, если по сути, итератором он не является ![]() |
Сообщ.
#305
,
|
|
|
Цитата Hryak @ Зачем целиком? Достаточно и этого, чтобы охарактеризовать то, что Делфи с программистам делает. Не со всеми, конечно, некоторые находят в себе силы сопротивляться - собственно, этому сопротивлению и посвящен остаток той недосказанной цитаты. Ой, ты знаешь, что мне напомнил? Тут HoIm как-то писал тему о быдлокодерах, так суть сводилась к тому, что быдлокодер помешан на том, что бы соблюсти все "так будет правильно", и вообще сделать все по науке, за счет чего сроки горят, и все такое, а нормальный специалист помешан на том, что бы решить задачу, за счет чего при нарушении всех "так будет правильно" в кратчайшие сроки получает готовый и стабильный продукт, который первым и продает ![]() ![]() |
![]() |
Сообщ.
#306
,
|
|
Вот что вышло:
![]() ![]() program Project1; {$APPTYPE CONSOLE} uses SysUtils, Classes, Variants; Type TAr=array of variant; PAr=^TAr; TParam=procedure(a:Tar); Type Ts_TestSignal=class fList:TList; pList:TList; procedure connect(aParam:TParam; arg:PAr); procedure Run; end; { Ts_TestSignal } procedure Ts_TestSignal.connect(aParam: TParam; arg:PAr); begin fList.Add(@aParam); pList.Add(arg); end; Procedure Handler1(a:tar); begin WriteLn('Handler 1 called'); end; Procedure Handler2(a:Tar); begin WriteLn('Handler 2 called. Passed string: ',string(a[0])); end; Procedure Handler3(a:tar); begin WriteLn('Handler 3 called. Sum of arguments: ',integer(a[0])+integer(a[1])); end; procedure Ts_TestSignal.Run; var i: Integer; H:TParam; a:PAr; begin for I := 0 to fList.Count - 1 do begin @h:=fList.Items[i]; a:=pList.Items[i]; h(a^); end; end; var s_testSignal:Ts_testsignal; h:TParam; ar:Par; begin s_testsignal.fList:=TList.Create; s_Testsignal.pList:=TList.Create; s_testsignal.connect(Handler1,@ar); new(ar); SetLength(ar^,1); ar^[0]:='Test string 1'; s_testsignal.connect(Handler2,ar); new(ar); SetLength(ar^,1); ar^[0]:='Test string 2'; s_testsignal.connect(Handler2,ar); new(ar); SetLength(ar^,2); ar^[0]:=10; ar^[1]:=20; s_testsignal.connect(Handler3,ar); new(ar); SetLength(ar^,2); ar^[0]:=20; ar^[1]:=30; s_testsignal.connect(Handler3,ar); s_testsignal.Run; s_testsignal.fList.Free; s_testsignal.pList.Free; readln; end. Результат: ![]() ![]() Handler 1 called Handler 2 called. Passed string: Test string 1 Handler 2 called. Passed string: Test string 2 Handler 3 called. Sum of arguments: 30 Handler 3 called. Sum of arguments: 50 Добавлено Перевести можно? Можно! На С++ проще? Проще! Мой прогноз работает! |
Сообщ.
#307
,
|
|
|
![]() Цитата Flex Ferrum @ См. мой пост №279. Вполне себе законченная программа на плюсах. Переведи на дельфи. ![]() Вы все еще юзаете костыли? Тогда мы идем к вам! ![]() ![]() (defun handler-1 () (format t "Handler 1 called~%")) (defun handler-2 (a-string) (format t "Handler 2 called. Passed string: ~a~%" a-string)) (defun handler-3 (a b) (format t "Handler 3 called. Sum of arguments: ~a~%" (+ a b))) (defmacro append-signal-to-chain (chain &rest handler) `(setf ,chain (append ,chain (list ,@handler)))) (defun emit-signal-chain (chain) (dolist (handler chain) (funcall handler))) (let ((test-signal nil)) (append-signal-to-chain test-signal #'handler-1 #'(lambda () (handler-2 "Test string 1")) #'(lambda () (handler-2 "Test string 2")) #'(lambda () (handler-3 10 20)) #'(lambda () (handler-3 10 30))) (emit-signal-chain test-signal)) ![]() ![]() linuxfan@tme ~ $ clisp signal.lisp Handler 1 called Handler 2 called. Passed string: Test string 1 Handler 2 called. Passed string: Test string 2 Handler 3 called. Sum of arguments: 30 Handler 3 called. Sum of arguments: 40 P.S.: не пытайтесь сделать из императивного языка функциональный P.P.S.: append-signal-to-chain в принципе не особо нужна -- так, для понта ![]() P.P.P.S.: в дельфях, по крайней мере, вложенные функции обеспечивают подобие заглушек, а в плюсах с этим совсем туго. Добавлено Слабо поднять холивар C++ vs Lisp? Я тут пару месяцев назад «On Lisp» вкурил ![]() |
![]() |
Сообщ.
#308
,
|
|
А вот простейший пример на Delphi:
![]() ![]() program Project1; {$APPTYPE CONSOLE} var i:integer; v:boolean=false; const pr:array [0..9] of string=('Морковь','Картофель','Помидоры', 'Огурцы','Капуста','Яблоки','Груши', 'Сливы','Персики','Абрикосы'); begin while not v do begin WriteLn('Выберите продукт:'); for I := 0 to 9 do Writeln(i,'. ',pr[i]); try ReadLn(i); v:=true; case i of 0..4:WriteLn('Вы выбрали овощи!'); 5..9:WriteLn('Вы выбрали фрукты!'); else begin WriteLn('Введенное число не входит в список!'); v:=false; end; end; except WriteLn('Вы ввели не число!'); end; end; ReadLn; end. Кто сделает на C++ с case'ом и без break'ов? |
Сообщ.
#309
,
|
|
|
Цитата Астарот @ а нормальный специалист помешан на том, что бы решить задачу, за счет чего при нарушении всех "так будет правильно" в кратчайшие сроки получает готовый и стабильный продукт Маленькая поправка - готовый, стабильный и неподдерживаемый продукт. Гнать таких спецов надо в шею, ИМХО... |
![]() |
Сообщ.
#310
,
|
|
Цитата Red XIII @ Цитата Астарот @ а нормальный специалист помешан на том, что бы решить задачу, за счет чего при нарушении всех "так будет правильно" в кратчайшие сроки получает готовый и стабильный продукт Маленькая поправка - готовый, стабильный и неподдерживаемый продукт. Гнать таких спецов надо в шею, ИМХО... Вот здесь согласен, но с поправкой на то, что для каждого языка свои "так будет правильно"! |
Сообщ.
#311
,
|
|
|
Цитата Red XIII @ Маленькая поправка - готовый, стабильный и неподдерживаемый продукт. Гнать таких спецов надо в шею, ИМХО... Я бы тебе поверил, если бы сам не работал в поддержке ![]() |
![]() |
Сообщ.
#312
,
|
|
Цитата Астарот @ Я бы тебе поверил, если бы сам не работал в поддержке ![]() Но вынужден согласиться и с этом. |
Сообщ.
#313
,
|
|
|
Цитата Red XIII @ Маленькая поправка - готовый, стабильный и неподдерживаемый продукт. Не всегда. |
Сообщ.
#314
,
|
|
|
Цитата Profi @ Кто сделает на C++ с case'ом и без break'ов? ![]() ![]() cout<<'Вы выбрали "<<(i<4?"овощи!":"фрукты!") остальное переписывать надо или и так понятно? |
![]() |
Сообщ.
#315
,
|
|
Цитата trainer @ ![]() ![]() cout<<'Вы выбрали "<<(i<4?"овощи!":"фрукты!") остальное переписывать надо или и так понятно? И где же тут case? Плюс ко всему условие выполниться и при i<0 и i>9! |