|
|
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Я пытаюсь написать бота. Больше нужна идея, нежели код и пример, но и примеры тоже будут полезны. Важно, чтобы в итоге код получился легко масштабируемым, чтобы можно было легко добавлять обработчики (процедуры) новых команд. Я так понимаю, что нужно создать какой-то список, где будет ключ: команда боту /start, /find, /найти, /Ещё что-то) и значение: название, соответствующей этому ключевому слову процедуре. Не писать же в процедуре входящих команд 100500 IF`ов? Дженерики почти никогда не использовал. Использовал что-то простое для строк и объектов или чисел. Буду благодарен за примеры и идеи. Хоть как это правильно объявить, с чего начать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 12:33 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
что-то типа Код: pascal 1. 2. чтобы можно было потом подставить название процедуры в качестве параметра и как это потом использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 12:45 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X11что-то типа Код: pascal 1. 2. чтобы можно было потом подставить название процедуры в качестве параметра и как это потом использовать? type TMyProc = function(const Command: string): string; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 12:47 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Внутри секции ptivate пишу Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. так? даже если разное количество параметров у процедур будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 13:07 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X11 Код: pascal 1. в итоге ругается компилятор Incompatible types: 'regular procedure and method pointer' Так правильно? Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 13:18 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X11, TMethod и Invoke на вскидку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 13:24 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
ziv-2014, ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 13:48 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Лучше уж добавлять обработку команд через о дельный метод: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 13:54 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
JaDi, а дальше? пока не понял идеи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 13:58 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
и вообще, в обработчик ведь надо параметры разные передавать. Поэтому сначала надо определиться с форматом этих параметров. Например, в виде json-строки. Type TBotWorker = procedure(const AParams: string); После чего получится Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 14:01 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
JaDi, я пока не знаю, какие будут параметры и какого типа. Мало того, заранее неизвестно, что напишет пользователь боту. Это может быть не только команда, но и простой текст, которые придётся распарсить и понять - какую процедуру обработки вызвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 14:03 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X11Внутри секции ptivate пишу Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. так? даже если разное количество параметров у процедур будет? Уже давно пора писать Код: pascal 1. И там неважно что будет тогда, метод, процедура или анонимная процедура ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 14:28 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X-Cite Код: pascal 1. Тогда как объявить словарь? Вот сделал так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Получаю ошибку при компиляции: Incompatible types: 'TProcedure' and 'TfmXXX.TBotProcRef' Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 15:27 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
А если словарь объявлять так: Код: pascal 1. 2. 3. 4. 5. 6. То тогда придётся объявлять несколько разных словарей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 15:35 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Навскидку Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 15:47 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Я пока думаю, что всегда будет один параметр, т.е. в качестве этого одного параметра будет входящее написанное пользователем сообщение.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 15:51 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X11А если словарь объявлять так: Код: pascal 1. 2. 3. 4. 5. 6. То тогда придётся объявлять несколько разных словарей Ладно, продолжаю тормозить rcvMessage - метод ресивера, который срабатывает при входящем сообщении Код: pascal 1. 2. 3. 4. И как запустить на выполнение cmdStart? Сейчас объявлено так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 15:57 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X11 Код: pascal 1. 2. здесь я ошибся, нужно подставлять имена реальных процедур Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. и как теперь выполнить cmdStart, в котором живёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 16:04 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Да, работает, бот получил эти 2 команды и запустил нужные процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 16:06 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Пример реализации: менеджер ботов, два боты со своими командами, обработка и вывод результата. Можно дальше дорабатывать, например, добавить пользовательские сессии в менеджере и хранить там состояние о об активном боте и введенных данных. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. Полностью реализация: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 16:20 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
JaDi, это тя прямо сейчас написал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 16:23 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
X11, ога... дфм форму не прикладываю, она там простая - кнопка и поле для ввода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 16:25 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Ага, спасибо. Значит, я шёл в нужном направлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 16:31 |
|
||
|
Дженерики: передача процедуры в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Не смог найти. Поэтому вопрос. А есть ли у Delphi встроенный способ создать словарь с регистронезависимым (case-insensitive) поиском по ключам? Код: pascal 1. Или нужно самому пилить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2018, 16:40 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39724091&tid=2038887]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 439ms |

| 0 / 0 |
