2016-12-06 67 views
0

我試圖使用高階函數刪除一些重複的代碼。以fn爲參數的高階函數與調用單一對象方法

這與調用Singleton對象方法有何不同?

示例代碼:

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 
} 

這是如何從調用使用Singleton對象方法相同的功能有所不同。

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

我確定我們可以使用高階函數做更多的事情,但我沒有真正理解這一點。

這是正確的方法來使用高階函數嗎?

有人可以給我鏈接正確使用高階函數的例子嗎?

+0

在這種情況下,直接使用功能沒有好處 – cchantep

回答

2

他們實現你在這裏不會做以外的任何其他回報您的其他功能的結果,在這種情況下,代碼可縮短至

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

的高階函數的filterDFForPaymentType功能是有用的一些邏輯本身(即在集合中構造集合的解構&),同時使用傳入函數作爲其一部分。在可能使用傳入函數的情況下,性能可能會有所不同。

+0

謝謝...有道理.. – Shankar