2017-12-12 5 views
0

私のプログラムは 文字列にゼロのない暗黙の型変換しないハッシュを使用して=>

hash = 
    { 
    'keyone'=> 'valueone', 
    'keytwo'=> 'valuetwo', 
    'keythree'=> 'valuethree' 
    } 

誰かが指摘し、このハッシュで正常に動作します。この表記は古く、それは今、私が使用する必要があるなし:

hash = 
     { 
     'keyone': 'valueone', 
     'keytwo': 'valuetwo', 
     'keythree': 'valuethree' 
     } 

私はこのエラーを取得する:

no implicit conversion of nil into String (TypeError) 

私はハッシュ表記だけを変更しました。 誰かが何が起こっているのか説明できますか?

+0

と同等です

{ 'key' => 'value' } 

に相当ないで、あなたは=> ''使用する必要があります。 [mu's](https://stackoverflow.com/a/10004344/5025116)の回答を参照してください。 –

+2

_ "私のプログラムはこのハッシュでうまく動作します" _ - コンマがないにもかかわらず? – Stefan

+0

@Stefan申し訳ありませんが、カンマをここに書くのを忘れていましたが、私はそれらをコードxD –

答えて

2

後者では、キーはシンボルとして保存されます。だから、としてそれらを参照する必要があります。

hash[:keyone] 

と記号だけで罰金であれば、これはあなたが文字列キーが必要な場合、あなたは「古い」に固執する必要があり、

hash = { 
    keyone: 'valueone', 
    keytwo: 'valuetwo', 
    keythree: 'valuethree' 
} 

にも優れています。しかし構文

hash = { 
    'keyone' => 'valueone', 
    'keytwo' => 'valuetwo', 
    'keythree' => 'valuethree' 
} 
0

new notationは、キーの記号を使用しています。

hash = { 
    keyone: 'valueone', 
    keytwo: 'valuetwo', 
    keythree: 'valuethree' 
} 
puts hash 
# {:keyone=>"valueone", :keytwo=>"valuetwo", :keythree=>"valuethree"} 

あなたのコードでは、項目間のコンマも欠けています。

1

I only changed the hash notation.

いいえ、あなたはしませんでした。また、キーオブジェクトのタイプをStringからSymbolに変更しました。

{ 'key': 'value' } 

が、それ以外のシンボルのキーについては

{ :key => 'value' } 
+0

に持っています。 –

関連する問題