Любой IBOutlet, который является подпредставлением основного представления Вашего Nib, не должен быть выпущен, потому что они будут отправлены сообщение автовыпуска после создания объекта. Единственный IBOutlet's, который необходимо выпустить в dealloc, является объектами верхнего уровня как контроллеры или другой NSObject's. Это все упоминается в документе Apple, связанном с вышеупомянутым.
Самая распространенная ошибка, о которой я знаю, - это вводить утечку пространства из-за ленивых вычислений . Есть много способов добиться этой ошибки, но один, который особенно привлекает программистов с другим опытом функционального программирования, - это поместить результат в параметр накопления, думая, что параметр накопления будет занимать постоянное место. Во многих случаях накапливаемый параметр занимает линейное пространство, потому что параметры не вычисляются.
Другая распространенная ошибка - забывать, что let
всегда рекурсивно . Непреднамеренное
let x = ... x ...
может привести к сбивающим с толку результатам.
Большинство других распространенных неприятных событий проявляются не в виде ошибок, а в виде проблем с прохождением программ через средство проверки типов или трудностей с пониманием монадической модели ввода-вывода. Иногда возникают трудности с пониманием списков и с нотациями do
.
В общем, трудности, с которыми сталкиваются начинающие программисты на Haskell, включают
IO
Распространенная ошибка , начинающаяся с программистов Haskell - это забудьте о различии между пространствами имен конструктора и типа . Это была такая ошибка новичка, что мне неловко, что к ней прикреплено мое имя, но я
Разница между []
и [[]]
: пустой список и список с 1 элементом, а именно пустой список. Этот особенно часто возникает в базовых случаях рекурсивных функций.
Используйте невозвратные функции или не строгие складки, возникающие при переполнении штабеля.
Понятие выражения для начинающих довольно запутанное. Возьмем условную конструкцию в императивных языках программирования. Там это всего лишь конструкция, а в Хаскелле - выражение. То есть если условие должно иметь соответствие, то и то, и другое должно давать значения одного и того же типа вычислений.
wrongFunc n = if n > 18
then 1
else False
Блок if вычисляет целое число, где, как и остальные, возвращает bool. Это распространенная ошибка, так как в Хаскелле это не просто блок выражений, а выражения.