2009-08-01 8 views
13

まず、私はここでErlangの新人です。私はMySQLデータベースとのインターフェースが必要で、erlang-mysql-driverが見つかりました。私はそれを試しています、そして構文のいくつかによって少し混乱しています。<< and >> Erlangのシンボル

私は(非常にここで簡潔にするために単純化)これで、データベースからデータの行を取得することができます:

[[<<"value from column1">>, <<"value from column2">>]] 
:だから今ここに

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が持っているものの一例です

私はそれがレコードのリストだと思います。この場合、クエリは1列の2列を返しました。

私の質問は:
<<>>シンボルが何を意味するのですか?

-record( 
    my_record, 
    { 
     column1 = "" 
     ,column2 = "" 
    } 
).  

答えて

15

ほんの少しの注:結果はビット列内包表記ではなく、ビット列です。しかし、ビットストリング内包表記を使用して、リストとリスト内包語のようなビットストリングのシーケンスを生成することができます。

バイナリと文字列(リスト)を変換するには、erlang:binary_to_list/1とerlang:list_to_binary/1を使用できます。

mysqlドライバがビット列を返す理由は、操作がはるかに高速であるため、(おそらく)です。

+0

bitstring_to_listが動作していました。私はbinary_to_listも参照する必要があります。私は自分のコードを動作させることができましたが、私はそれをより正確にするつもりです。 – marcc

1

は、これらのビット列の内包されている:そして、私は次のように定義されたレコードには、このようなリストを回すための最良の(アーラン-推奨)構文は何ですか。

ビットストリング内包表記は、リスト内包表記に似ています。これらは、ビット列を効率的かつ簡潔に生成するために使用されます。

ビット列の内包は、次の構文で書かれている:

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

ビット列は、ビット列式であり、そして各修飾子は、発電機、ビット列発生器またはフィルタのいずれかです。

発電機は次のように書かれます:

Pattern <- ListExpr. 

ListExprは、用語のリストに評価される式でなければなりません。

ビット列生成は次のように書かれます:ビット列に評価される式でなければなりません

BitstringPattern <= BitStringExpr. 

BitStringExpr

•フィルタはtrueまたはfalseと評価される式です。 ジェネレータ内の変数は、ビット列内包を囲む関数節のシャドー変数をパターン化します。

ビットストリングの理解度は、ビットストリングを返します。ビットストリングは、すべてのフィルターが真で​​あるビットストリングジェネレーターエレメントの組み合わせごとに、BitStringの評価結果を連結して作成されます。

例:あなたの具体的な例では

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

です。返信いただきありがとうございます。私は今MySQL Row - > Record関数を書こうとし、何が起こるかを見ようとしています... – marcc

+0

そして、私の場合はフィルタやジェネレータがないので、単にerlang:bitstring_to_list/1。どうもありがとう! – marcc

+2

<< and >>の最も重要な意味は、バイナリ自体を示すことです。質問にビット列の理解の兆候はありません! – gleber

6

、あなたが返される列の値に一致させることにより、変換を行い、その後、このような新しいレコードを作成することができます。

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