<< и >> символы в Эрланге
Прежде всего, я новичок в Erlang. Мне нужно подключиться к базе данных MySQL, и я нашел erlang-mysql-driver. Я пытаюсь это сделать, и я немного смущен некоторым синтаксисом.
Я могу получить строку данных из базы данных с этим (для упрощения здесь значительно упрощен):
Result = mysql:fetch(P1, ["SELECT column1, column2 FROM table1 WHERE column2='", Key, "'"]),
case Result of
{data, Data} ->
case mysql:get_result_rows(Data) of
[] -> not_found;
Res ->
%% Now 'Res' has the row
Итак, вот пример того, что у `Res ':
[[<<"value from column1">>, <<"value from column2">>]]
Я получаю, что это список записей. В этом случае запрос возвратил 1 строку из 2 столбцов.
Мой вопрос:
Что означают символы <<
и >>
? И какой лучший (рекомендуемый Erlang) синтаксис для превращения списка, подобного этому, в записи, которые я определил как:
-record(
my_record,
{
column1 = ""
,column2 = ""
}
).
Ответы
Ответ 1
Просто небольшое примечание: результаты не являются строками бит для каждого изображения, это просто бит строки. Тем не менее, вы можете использовать понимание битовой строки для создания последовательности битовых строк (которая описана выше с генераторами и т.д.), Подобно спискам и спискам.
вы можете использовать erlang: binary_to_list/1 и erlang: list_to_binary/1 для преобразования между двоичными и строками (списками).
Причина, по которой драйвер mysql возвращает битовые строки, вероятно, потому, что они намного быстрее манипулируют.
Ответ 2
В вашем конкретном примере вы можете выполнить преобразование, сопоставляя значения возвращаемого столбца, а затем создавая новую запись следующим образом:
case mysql:get_result_rows(Data) of
[] ->
not_found;
[[Col1, Col2]] ->
#my_record{column1 = Col1, column2 = Col2}
end
Ответ 3
Это распознавания битовых строк.
Понятия бит-строки аналогичны пониманию List. Они используются для генерации бит-строк эффективно и лаконично.
Понятия бит-строки написаны со следующим синтаксисом:
<< BitString || Qualifier1,...,QualifierN >>
BitString - это строковое выражение, и каждый Qualifier является генератором, генератором битовой строки или фильтром.
• Генератор записывается как:
Pattern <- ListExpr.
ListExpr должно быть выражением, которое вычисляется в списке терминов.
• Генератор битовой строки записывается как:
BitstringPattern <= BitStringExpr.
BitStringExpr
должно быть выражением, которое оценивается в битовой строке.
• Фильтр - это выражение, которое вычисляется как true или false.
Переменные в шаблонах генератора изменяют теневые переменные в предложении функции, окружающем понимание битовой строки.
Понятие бит-строки возвращает битовую строку, которая создается путем объединения результатов оценки BitString
для каждой комбинации элементов генератора битовой строки, для которых все фильтры являются истинными.
Пример:
1> << << (X*2) >> ||
<<X>> <= << 1,2,3 >> >>.
<<2,4,6>>