parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Речь не об этом...

Sumo 07.01.2010 20:00

Понятно, что есть случаи, когда рефлексия сильно помогает (хотя метод reflection:create и можно заменить на process) и упрощает код, но таких случаев очень мало. Иными словами, применять reflection и process стоит только в крайних случаях.

Простой пример. Допустим нам надо написать функцию, которая читает файл с классом с диска и возвращает объект этого класса.

Вооружимся знанием про "удобный" метод process и сделаем ровно так как описано в задаче:
@getObject[aClassName][lFile]
  $lFile[^file::load[text;path/to/classes/${aClassName}.p]]
  ^process{^taint[as-is][$lFile.text]}
  $result[^process{^^$aClassName::create^[^]}]
А теперь задумаемся можем ли мы решить задачу проще и оптимальнее? Оказывается можем:
@getObject[aClassName]
  ^use[path/to/classes/${aClassName}.p]
  $result[^reflection:create[$aClassName;create]]
Причем замену process на reflection:create можно было и не делать - основной выигрыш дала замена load+taint+process на use.

Надеюсь теперь будет более понятно, что "удобство" метода не является причиной для его использование, особенно в том случае, когда задача решается более простыми средствами. :)