2012-04-02 9 views

答えて

8

あなたが行うことができます(あなたの質問あたりなど)のハッシュを使用したい場合:

def readable_status(status) 
    readable = { "1" => "go", "2" => "stop", "3" => "die" } 
    readable[status] || "default value" 
end 
+0

デフォルト値は涼しいです!! –

+4

+1。または 'readable.fetch(status、" default_value ")'。これはRubyを初めて使う人にとってわかりやすいかもしれません(あなたのバージョンも好きです)。 –

+0

どのようにすればreadable.fetchを使用できますか? –

5

ちょうどあなたが望むなら、あなたがそれをoneliner行うことができます

def readable_status(status) 
    m = {'1' => 'go', '2' => 'stop', '3' => 'die'} 
    m[status] 
end 

を使用し、必ず:

... 
{'1' => 'go', '2' => 'stop', '3' => 'die'}[status] 
+1

私はちょうど値が望まれる時に逆参照されたハッシュ定数をしないために、代わりの方法ラッパー内のこのロジックを残すために(ルビー初心者OPに)お勧めしますが、これは、いいです。 @karatedogが言うように、あなたのニーズは時々変わります。これをメソッドに保持すると、コードの他の部分に影響を与えずに、単にハッシュ以上のものを使うように実装を変更することができます。 – Phrogz

6

+0

非常にいい:) +1 –

+0

私はこれがコードを読むのをより困難にするので、これはあまり良くないと思います –

5

私に与えられた準最適な仕様(開発中のビジネス変更された仕様)のために、この問題に対してHash-esでの試行に失敗しました。

ハッシュは、単一の値よりも少し複雑なものを書く必要があるまでは有効です。これらの単一の値をメソッドに変更する必要がある場合は、ハッシュが定義されている場合にハッシュがを呼び出すことで、ハッシュがメソッドの値をとるため、すべてを書き直す必要があります。後でメソッドの戻り値が変更された場合、ハッシュは変更されません。

とハッシュは方法、ハッシュ(とその中のすべての文字列)内で定義されている場合には、メソッドが呼び出されるたびに再作成された:-)

def readable_status(status) 
    case status 
    when "1" then "go" end 
    when "2" then "stop" end 
    when "3" then "die" end 
    end 
end 
1

読める英語のまま。定数を定義することでこれを防ぐことができます。 @Phrogzによると、値にアクセスする方法を使用すると柔軟性が保たれます。

READABLE_STATUS_TABLE = {'1'=>'go', '2'=>'stop', '3'=>'die'} 

def readable_status(status) 
    READABLE_STATUS_TABLE[status] 
end 
関連する問題