Erlang中的<<和>>符号

mar*_*rcc 13 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
Run Code Online (Sandbox Code Playgroud)

所以现在这里有一个'Res'的例子:

[[<<"value from column1">>, <<"value from column2">>]]
Run Code Online (Sandbox Code Playgroud)

我知道这是一份记录清单.在这种情况下,查询返回1行2列.

我的问题是:
什么是对<<>>符号是什么意思?用于将这样的列表转换为我已定义的记录的最佳(Erlang推荐)语法是什么:

-record(  
    my_record,  
    {   
      column1 = ""  
      ,column2 = ""  
    }  
 ).     
Run Code Online (Sandbox Code Playgroud)

Maz*_*ake 15

只是一个小小的注释:结果不是每次看到的位串理解,它们只是位串.但是,您可以使用位串解析来生成一系列位串(上面用生成器和它描述),非常类似于列表和列表推导.

你可以使用erlang:binary_to_list/1和erlang:list_to_binary/1来转换二进制和字符串(列表).

mysql驱动程序返回位字符串的原因可能是因为它们操作起来要快得多.


Zed*_*Zed 6

在您的特定示例中,您可以通过匹配返回的列值,然后创建如下所示的新记录来执行转换:

case mysql:get_result_rows(Data) of
  [] ->
    not_found;  
  [[Col1, Col2]] ->  
    #my_record{column1 = Col1, column2 = Col2}
end
Run Code Online (Sandbox Code Playgroud)