<< и >> символы в Эрланге

Прежде всего, я новичок в 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>>