2017-07-11 6 views
1

(ハッシュ&シンボル)とハッシュの定義:ルビーon Railsのチュートリアル:レッスン4.3.3でマイケル・ハートルのRoRのチュートリアルの演習については記号キー

「は名前、電子メールに対応する記号キーを持つハッシュを定義し、 「パスワードダイジェスト」、あなたの名前、電子メールアドレス、ランダムな16文字の小文字の文字列に等しい値を指定します。

私はいくつかの入力や代替の&(これは少なくとも私の解決策に関するいくつかの批判)を "より良い"解決策にしたいと考えています。

def my_hash 
    a = ('a'..'z').to_a.shuffle[0..15].join 
    b = { name: "John", email: "[email protected]", password: a } 
    return b 
end 

puts my_hash 

(はい、私はそれは前に頼まれている場合、これは非常に単純な運動であると認識してお詫びいたします。)多くの2点の改良がなされ得るがあります

答えて

3

  1. 使用Array#sampleを取得しますランダムな文字(それは利点があります:文字は実際にはパスワードで繰り返すかもしれませんが、shuffle[0..15]は16 を別として返します文字);
  2. 冗長なローカル変数、特にreturnを避けてください。ここで

あなたが行く:

def my_hash 
    { 
    name: "John", 
    email: "[email protected]", 
    password: ('a'..'z').to_a.sample(16).join 
    } 
end 

puts my_hash 

ボーナス:

を私はaccidentaly元のコードで第三グリッチを発見しました。それはおそらく次のようになります。

def my_hash 
    { 
    name: "Brandon", 
    email: "[email protected]", 
    password: ('a'..'z').to_a.sample(16).join 
    } 
end 

:)クールだ

+0

。私は 'Enumerable#sample'をまだ見かけませんでしたが、私はそこで優位性を見て取ることができます。ありがとう!また、すべてのキー/値のペアを1行に収めないことが味やベストプラクティスの問題であるかどうか疑問に思っていますか? – Belder

+1

シングルラインについて:ここでは、スマートフォンからの読書を尊重し、それほど広いスクリーンを持っていない人を尊重することが主な問題です。 AFAIR、[rubocop](https://github.com/bbsosov/rubocop)には80行以上の行を持たないデフォルトルールがあります。しかし、このようなルールを設定することは、コード所有者/チームの責任です。 – mudasobwa

+0

ok ..それは知っているのは良いことだ。私はrubocopを使用しましたが、そのルールを認識していませんでした。非常に役立ちます。笑...そしてあなたはその不具合について正しい。 – Belder

関連する問題