2017-12-13 4 views
-1

次戻りdefault"client?":私は「デフォルト」以外のものを取り出すことができない理由リターンメンバー

class ClientMap 
    def initialize 
     @@clients = {"DP000459": "BP"} 
     @@clients.default = "client?" 
    end 

    def get(id) 
     return @@clients[:id] 
    end 
end 

clientMap = ClientMap.new 
cKey = "DP000459" 
puts clientMap.get(cKey) 

誰も説明してもらえますか?

+4

私は強くあなたが "intro to ruby​​"チュートリアルに従うことを強くお勧めします。私はあなたが他の言語でコードを書く方法を知っていただきありがとうございますが、このコードは**他の言語で書かれているように見えます! –

答えて

5

あなたには2つの問題があります。まず、ハッシュのシンボル構文を使用しています。これは、キーがシンボルである場合にのみ機能します。キーを文字列にするには、ハッシュロケットの構文(@@clients = {'DP000459' => 'BP'})を使用する必要があります。

第2に、提供されるパラメータに関係なく、clients[:id]が返されます。キーはローカル変数idではなくシンボル:idです。これを@@clients[id]に変更する必要があります。

class ClientMap 

    def initialize 
    @@clients = {'DP000459' => 'BP'} 
    @@clients.default = 'client?' 
    end 

    def get(id) 
    @@clients[id] 
    end 
end 

私も間隔がよりルビー・慣用作りの自由を撮影した:

はここで何をしたいのクリーンアップバージョンです。

最後に、ルビー、use snake_caseで変数名のために:

>> client_map = ClientMap.new 
>> c_key = 'DP000459' 
>> client_map.get(c_key) 
#> "BP" 
+0

Aha - 当然ですが、id:パラメータIDを使用するのではなく、idをキーにしていました。 – progan01

+0

私は今、うまく動作します。 「正しいものとして受け入れる」方法を理解していない。 – progan01

+0

おそらく 'get'で永続するのではなく、組み込みの' fetch'メソッドをここで使う方が良いでしょうか? – SRack

0

これらのコードを見てみましょう。

h = { foo: 'bar' }    # => {:foo=>"bar"} 
h.default = 'some default value' # => "some default value" 
h[:foo]       # => "bar" 
h[:non_existing_key]    # => "some default value" 

あなたは返し

ハッシュ#デフォルトの方法

について hereを読むことができますデフォルト値、 キーがeでなかった場合、hshによって返される値xsh in hsh

+0

@SergioTulentsev – user3309314

+0

アドバイスをいただき、ありがとうございます。私はコードがRubyの単語のように見えていることを理解しています。他の言語に重なっているhaha – progan01

+0

OPはハッシュをデフォルトで正しく使用しています。他の問題は、コードが動作しない原因となっていました。 – moveson