2017-01-04 1 views
0

私はSinatraでwikiを作成していますが、次のコードがあります。私は "ページ"に保存されているすべてのwikiエントリを取得し、リンクとしてホームページに表示しようとしています。私のsinatraアプリケーションのホームページのリンクとしてフォルダ内のすべてのファイルを取得して表示

get "/" do 
    @entries = Dir["pages/*.txt"] 
    @entries.map! { |f| f.split '/' } 
    @entries.flatten! 
    @entries.delete_if { |p| p == "pages" } 
    @entries = @entries.sample(5) 
    erb :welcome, layout: :page 
end 

ルビーの天才が雄弁なルビーを実演したいのであれば、私はとても感謝しています!

答えて

1
@entries = Dir["pages/*.txt"]. 
       map { |path| path.split '/' }. 
       flatten. 
       reject { |path| path == 'pages' }. 
       sample(5) 

もっとも明白なことは、メソッド呼び出しを連鎖させることです。これを行うことで、より「関数型プログラミング」スタイルにもなります。どのように私はreject(これはありません)とdelete_if(配列を変更する)を置き換えてください。私はまた、 "bang"メソッドを削除しました。なぜなら、ここではメソッドの変更を必要としないからです。これらは、時には意図しない影響を与えることがあるため、あなたが到達する最初のものであってはなりません。

たとえば、私は最近、同僚がreturn string.gsub!(" ", "")などと書いてあることを発見しました。問題はgsub!がnilを返すことです。代わりにgsubを使用してください。

+0

これはバングの方法についての良いアドバイスです。ありがとうございました! – matt

関連する問題