2012-03-02 2 views
1

、それは以下のコードが含まれていますunknow Erlangの構文

pp(L) when is_list(L) -> 
    [pp(X) || X <- L]; 
pp(X) -> 
    case '#is_record-'(X) of %<=========What's meaning of '"#is_record-'? 
    true -> 
     RecName = element(1,X), 
     {RecName, lists:zip(
      '#info-'(RecName,fields), %<=======what's meaning of ''#info-'? 
      pp(tl(tuple_to_list(X))))}; 
    false -> 
     if is_tuple(X) -> 
      list_to_tuple(pp(tuple_to_list(X))); 
      true -> 
      X 
     end 
    end. 

'#is_record-'''#info-'の発現は何ですか? "is_record"はerlang:is_recordに参照されることがありますか? 「#info-」とは何ですか?

+2

これは価値があるかもしれません:https://github.com/esl/parse_trans/blob/master/src/exprecs.erl#L116 –

+2

これはちょうど面白い関数名です。関数名は* atom *でなければならず、@Milleは原子の中の文字を '' 'で囲むことによって、基本的に名前に任意の文字を入れることができると指摘しています。したがって、 ''#is_record-''と ''info-''は単なる原子です。レコードやその他のものとの本質的な関係はありません。 – rvirding

答えて

6

ケマル氏は、メソッド宣言をgithub.com/esl/parse_trans/blob/master/src/exprecs.erl#L116で見ています。

あなたが混乱している'の場合、Erlangの関数名はアトムであり、アトムは小文字で始める必要があり、そうでなければ'で囲む必要があることに注意してください。詳細についてはdocsを確認してください。

関連する問題