2016-12-06 68 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