Почему переменная Erlang неиспользуема?

Если Вы понимаете, что процесс сохраняет/выпускает затем существует два золотых правила, которые "понятное дело" очевидны для установленных программистов Cocoa, но к сожалению редко разъясняются это ясно для вновь прибывших.

  1. , Если функция, которая возвращает объект, имеет alloc, create или copy на его имя затем, объект является Вашим. Необходимо звонить [object release], когда Вы закончены с ним. Или CFRelease(object), если это - объект Базовой Основы.

  2. , Если это НЕ имеет одного из этих слов на его имя затем, объект принадлежит кому-то еще. Необходимо звонить [object retain], если Вы хотите сохранить объект после конца Вашей функции.

Вы были бы хорошо обслужены, чтобы также следовать этой конвенции в функциях, которые Вы создаете сами.

(Педанты: Да, существует, к сожалению, несколько вызовов API, которые являются исключениями к этим правилам, но они редки).

20
задан pupeno 14 August 2009 в 13:38
поделиться

1 ответ

Это связано с тем, что переменные, встречающиеся на левой стороне генераторов, здесь X и Y, всегда являются новыми несвязанными переменными локальными для понимания. Это означает, что это не те же переменные, что и X и Y в заголовке троек, и, следовательно, неявный тест на равенство отсутствует. Это похоже на funs, где все переменные, встречающиеся в заголовке fun, также являются новыми переменными, локальными для fun.

Это отличается от большей части остальной части erlang, поэтому компилятор не только предупреждает, что X и Y в голове не используются, но также, что X и Y в понимании затеняют другие переменные. Они также нигде не используются в понимании.

Простой способ получить желаемое:

[ Result || Result = {X1,Y1,_} <- Self, X =:= X1, Y =:= Y1 ]
51
ответ дан 29 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: