<<和>> Erlang中的符号

时间:2009-08-01 05:49:36

标签: 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 = ""  
    }  
 ).     

3 个答案:

答案 0 :(得分:15)

只是一个小小的注释:结果不是位字符串 comprehensions 每次看到,它们只是位字符串。但是,您可以使用位串解析来生成一个位串序列(上面用生成器和它描述),就像列表和列表推导一样。

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:1)

这些是位字符串理解。

比特串理解类似于列表理解。它们用于有效和简洁地生成位串。

使用以下语法编写位串解析:

<< BitString || Qualifier1,...,QualifierN >>

BitString是一个位串表达式,每个限定符都是生成器,位串生成器或过滤器。

•生成器编写为:

 Pattern <- ListExpr. 

ListExpr必须是一个计算结果列表的表达式。

•位串生成器写为:

 BitstringPattern <= BitStringExpr. 

BitStringExpr必须是一个计算结果为bitstring的表达式。

•过滤器是一个计算结果为true或false的表达式。 生成器模式中的变量在函数子句中影响变量,包围位串理解。

位串解析返回一个位串,该位串是通过连接所有滤波器为真的每个位串生成元素组合的求BitString的结果而创建的。

示例:

1> << << (X*2) >> || 
<<X>> <= << 1,2,3 >> >>.
<<2,4,6>>