2016-05-03 7 views
1

私の目標は、クラス値としてデフォルト値を持つハッシュを使用することです。これを行うには、あらかじめ定義された値とデフォルト値を持つ定数として、1行にハッシュを初期化する必要があるようです。ハッシュを定数として、Rubyのデフォルト値で1行で宣言する

Rubyのドキュメントによれば、私は2つの方法でデフォルト値を設定することができる:

  • コンストラクタは次に以下のように値を追加することによって:

    MY_HASH = Hash.new(-1) 
    MY_HASH[1] = 0 
    MY_HASH[2] = 42 
    
  • 値を加算することにより最初にデフォルト値を後で設定する:

    MY_HASH = { 
        1=>0, 
        2=>42, 
    } 
    MY_HASH.default = -1 
    

私はこのような1行でそれを実行しようとしましたが、それは動作しません:

MY_HASH = { 
     1=>0, 
     2=>42, 
    }.default = -1 

    #It's the same as : 
    MY_HASH = -1 

は、1行のデフォルト値でハッシュを宣言するための方法はありますか?

+0

:-)、私はに異論はありませんあなたが選択した答え。私は同じ選択をしていただろう(そして、それが利用可能であったならばその答えを与えただろう)。しかし、あなたは質問を投稿してから20分も経たないうちにそれを選択しました。私は将来、あなたが他の答えを止めたり、答えに取り組んでいる他の人を短絡させたりしないように、しばらくの間、選択を止めておくことをお勧めします。ここでは多くの場合、緑の贈り物を与える前に少なくとも2時間待つ。 –

答えて

4

あなたはupdateを使用することができます。

MY_HASH = Hash.new(-1).update(1 = >0, 2 => 42) 
MY_HASH[1] 
#=> 0 
MY_HASH[52] 
#=> -1 

それともHash#mergeを使用することができます。

3

別の方法:

MY_HASH = { 1=>0, 2=>42 }.tap { |h| h.default = -1 } 
MY_HASH[1]   #=> 0 
MY_HASH[529326] #=> -1 

ハッシュ値のいずれもnilませんかfalseあなたも書くことができる場合:

MY_HASH = ->(key) { { 1=>0, 2=>42 }[key] || -1 } 
MY_HASH[1]   #=> 0 
MY_HASH[529326] #=> -1 

ピエール

関連する問題