2017-01-11 3 views
1

最初のコードは、Webからの練習問題の最初の草案です。すべてのテストに合格しますが、重複したコードがたくさんあります。 私は関数を抽象化していき、2番目の項目を取得しましたが、これは同じように動作するはずですが、(それはちょっとしたことですが)間違っていますか?スカラのコード抽象化

1)

class Anagram(strg: String) { 

    def matches(words: Seq[String]): Seq[String] = { 
    def stylisticDifference(things: Seq[String], text: String): Seq[String] = { 
     things.filter(w => w.toLowerCase == text.toLowerCase) 
    } 
    def essensialSimlitude(things: Seq[String], text: String):Seq[String] = { 
     things.filter(w => w.toLowerCase.sorted == text.toLowerCase.sorted) 
    } 
    essensialSimlitude(words,strg) diff stylisticDifference(words,strg) 

    } 
} 

2)

class Anagram(strg: String) { 
    def matches(words: Seq[String]):Seq[String] = { 
    def answer(things: Seq[String], text: String, fn: String => String): Seq[String] = { 
     things.filter(w => fn(w.toLowerCase) == fn(text.toLowerCase)) 
    } 
    val stringSort = (s: String) => s.sorted 
    answer(words,strg, identity) diff answer(words, strg, stringSort) 
    } 
} 
+2

2番目のもので何が失敗していますか?それは何をすべきか、代わりに何をしていますか? – puhlen

+0

は 'w => fn(w.toLowerCase)== fn(text.toLowerCase)'を 'w => fn(w)に変更します.toLowerCase == fn(テキスト).toLowerCase'。 '小文字のソート '結果は'小文字のソート 'とは異なります –

答えて