Здравствуйте, Quintanar, Вы писали:
Q>У тебя задачи, собственно, нет, поэтому сложно догадаться, что именно тебя интересует.
Окей, перефразирую вопрос — что в функциональных языках является аналогом связки "полиморфизм+фабрика" ? В повседневной работе она встречается сплошь и рядом, на месте приведенного мной примера кода работы с базой могло быть все что угодно: например, так мы могли загружать сериализованные объекты, считывать команлы сетевого протокола и т.д. и т.п.
>> как подобная задача решается с помощью функциональных языков??
Q>Ну, например, так.
Q>Q>let get_connect name =
Q> if name = "mysql" then mysql_connect else oracle_connect
Q>let main arg =
Q> let connect = get_connect arg in
Q> bla-bla-bla
Q>
Стоп, я наверное неправильно понял, но допустим, что у нас есть не только функция connect(), но и куча других функций, необходимых для работы с базой:
сlose(), commit() и т.д. Неужели мне для каждой из этих функций придется делать проверку параметра name? т.е. писать:
let get_close name =
if name = "mysql" then mysql_close else oracle_close
let get_commit name =
if name = "mysql" then mysql_commit else oracle_commit
Но ведь с тем же успехом я мог бы писать и на чистом C, проверяя в каждой функции параметр или глобальную переменную name!
Разве это не шаг назад по сравнению с приведенным мной полиморфным кодом??