2016-12-06 4 views
0

高次関数を使用して重複したコードを削除しようとしています。高次関数fnを引数に使用して対シングルトンオブジェクトを呼び出す方法

これはSingleton Objectメソッドの呼び出しとどのように違うのですか?

サンプルコード:これはシングルトンオブジェクトのメソッドを使用して同じ関数を呼び出すと異なる方法

filterDFForPaymentType(filterDF, df, "Manual") 
filterDFForPaymentType(filterDF, df, "Electronic") 

def filterDFForPaymentType(fn: (DataFrame, String) => DataFrame, df: DataFrame, paymentType: String) { 
     fn(df, paymentType) 
} 

def filterDF(df: DataFrame, paymentType: String): DataFrame = { 
     val filteredDF = df.where(col("paymenttypecol") === paymentType) 
     filteredDF 
} 

filterDFForPaymentType(UtilClass.filterDF(df, "Manual")) 
filterDFForPaymentType(UtilClass.filterDF(df, "Electronic")) 

私たちは高次関数を使ってはるかに多くを行うことができますが、実際にその点は得られません。

これは高次関数を使用する正しい方法ですか?

高次関数を適切に使用するためのリンクを教えてもらえますか?あなたがここにある

+0

この場合、直接関数を使用する利点はありません – cchantep

答えて

2

filterDFForPaymentType機能は、あなたの他の関数の結果を返す以外に何もしない、この場合のコードは、彼らが実装どこより高次の機能が便利です

filterDF(df, "Manual") 
filterDF(df, "Electronic") 
def filterDF(df: DataFrame, paymentType: String): DataFrame = { 
     val filteredDF = df.where(col("paymenttypecol") === paymentType) 
     filteredDF 
} 

に短縮することができますいくつかのロジック自体(つまり、コレクションでは、コレクションの分解を&で行います)、渡された関数をその一部として使用しています。渡された関数がオプションで使用される場合は、パフォーマンスに差が生じる可能性があります。

+0

ありがとうございます.. – Shankar

関連する問題