2011-08-01 9 views
2

明示的に指定されていない限り、デフォルト値でレコードを初期化するのは一般的な方法ですか? デフォルト値でレコードを初期化する

は私の質問は、このPythonコードを取る説明するために:
class Encoder: 
    def __init__ (self, minLength = 1, maxLength = 258, maxDistance = 32768): 
     self.__minLength = minLength 
     self.__maxLength = maxLength 
     self.__maxDistance = maxDistance 
     self.__window = [] 
     self.__buffer = [] 

は今、私が上書きされたデフォルト値を持つレコードを作成する、すなわち、Erlangで同じことをやろうとしています。これまでの私の解決策は以下の通りです:

-record (encoder, {minLength, maxLength, maxDistance, window = [], buffer = [] }). 

init (Options) -> 
    case lists:keyfind (minLength, 1, Options) of 
     false -> MinLength = 3; 
     {minLength, MinLength} -> pass 
    end, 
    case lists:keyfind (maxLength, 1, Options) of 
     false -> MaxLength = 258; 
     {maxLength, MaxLength} -> pass 
    end, 
    case lists:keyfind (maxDistance, 1, Options) of 
     false -> MaxDistance = 32768; 
     {maxDistance, MaxDistance} -> pass 
    end, 
    #encoder {minLength = MinLength, 
     maxLength = MaxLength, 
     maxDistance = MaxDistance}. 

これはまあまあです。

私の質問は以下のとおりです。

  • は私にすべてこのコードを保存し、いくつかの言語構造や糖衣構文はありますか?
  • これを達成するための一般的な慣行は何ですか?
  • 私の原子の代わりに普通の練習は何ですか私は明らかにPythonから盗んだpass
+1

あなたが尋ねることもしかして:どのように私は、デフォルト値を持つレコードを構築します」「どのように私は、デフォルト値を持つレコードを構築していますか?」、または私は既存のリスト/プロプリストを持っているとしたら? " –

+0

@David後者です。 – Hyperboreus

+1

入手しました。関係のないメモでは、スタイルの問題として、原子の下線を使用するのが一般的な方法です。 minLengthの代わりにmin_length。 –

答えて

5

あなたはそうのようなproplistsモジュールを使用することができます。

 
-record (encoder, {minLength, maxLength, maxDistance, window = [], buffer = [] }). 

init (Options) -> 
    #encoder {minLength = proplists:get_value(minLength, Options, 1), 
     maxLength = proplists:get_value(maxLength, Options, 256), 
     maxDistance = proplists:get_value(maxDistance, Options, 32768)}. 

+0

ありがとう、これは私が探していたものです。 – Hyperboreus

関連する問題