Система не очищает память при отпускании ее через delete()
. Таким образом, содержимое остается доступным, пока память не будет назначена для повторного использования и перезаписана.
Раньше будучи одним из "тех людей", я не знаю, что существует сжатый способ подвести итог, почему сопоставление с образцом является таким вкусным совершенством. Это основано на опыте.
Обратный, когда я только что поглядел на сопоставление с образцом и думал, что это был прославленный оператор переключения, я думаю, что не имел опыта при программировании с алгебраическими типами данных (кортежи и дизъюнктные объединения) и не вполне видел, что сопоставление с образцом было и конструкцией управления и обязательная конструкция. Теперь, когда я программировал с F#, я наконец "получаю его". Прохлада сопоставления с образцом происходит из-за слияния функций, найденных на языках функционального программирования, и таким образом, это нетривиально для outsider-looking-in для понимания.
я пытался подвести итог одного аспекта того, почему сопоставление с образцом полезно во втором из короткого ряда блога с двумя частями на дизайне API и языке; выезд часть первая и часть вторая .
Выборка от эта статья блога:
Сопоставление с образцом имеет несколько преимуществ перед отправкой метода и операторами переключения:
Шаблоны дают Вам маленький язык для описания структуры значений, которым Вы хотите соответствовать. Структура может быть произвольно глубокой, и можно связать переменные с частями структурированного значения.
Это позволяет Вам писать вещи чрезвычайно кратко. Можно проиллюстрировать это с небольшим примером, таким как производная функция для простого типа математических выражений:
type expr =
| Int of int
| Var of string
| Add of expr * expr
| Mul of expr * expr;;
let rec d(f, x) =
match f with
| Var y when x=y -> Int 1
| Int _ | Var _ -> Int 0
| Add(f, g) -> Add(d(f, x), d(g, x))
| Mul(f, g) -> Add(Mul(f, d(g, x)), Mul(g, d(f, x)));;
Кроме того, потому что сопоставление с образцом является статической конструкцией для статических типов, компилятор может (i) проверять покрытие всех случаев (ii), обнаруживают избыточные ответвления, которые никогда не могут соответствовать никакому значению (iii), предоставляют очень эффективному внедрению (переходы и т.д.).
Первое, что пришло на ум:
Переключатель является двумя передними колесами.
Сопоставление с образцом является всем автомобилем.
Шаблон соответствует в OCaml, в дополнение к тому, чтобы быть более выразительным, как упомянуто несколькими способами, которые были описаны выше, также дайте некоторые очень важные статические гарантии. Компилятор докажет для Вас, что анализ случая, воплощенный Вашим оператором соответствия шаблона:
Это - действительно грандиозное предприятие. Полезно, когда Вы пишете программу впервые, и чрезвычайно полезные, когда Ваша программа развивается. Используемый правильно, операторы соответствия помогают изменить типы в Вашем коде надежно, потому что система типов указывает на Вас на поврежденные операторы соответствия, которые являются достойным индикатором того, где у Вас есть код, который должен быть исправлен.
Возможно, Вы могли провести аналогию со строками и регулярными выражениями? Вы описываете , что Вы ищете и позволяете компилятору выяснить как для себя. Это делает Ваш код намного более простым и более ясным.
Как в стороне: Я нахожу, что самая полезная вещь о сопоставлении с образцом состоит в том, что оно поощряет хорошие привычки. Я имею дело с угловыми случаями первый , и легко проверить, что я покрыл каждый случай.