以 fn 作为参数的高阶函数与调用单例对象方法
Higher Order Function with fn as argument vs calling singleton object method
我正在尝试使用高阶函数删除一些重复代码。
这与调用单例对象方法有何不同?
示例代码:
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"))
我相信我们可以使用高阶函数做更多的事情,但我不太明白这一点。
这是使用高阶函数的正确方法吗?
有人可以通过示例给我 link 如何正确使用高阶函数吗?
您在此处的 filterDFForPaymentType 函数除了 return 您其他函数的结果外不执行任何其他操作,在这种情况下,代码可以缩短为
filterDF(df, "Manual")
filterDF(df, "Electronic")
def filterDF(df: DataFrame, paymentType: String): DataFrame = {
val filteredDF = df.where(col("paymenttypecol") === paymentType)
filteredDF
}
高阶函数在它们自己实现一些逻辑(即在集合中解构和构造集合)同时使用传入函数作为其中的一部分时很有用。在可以选择使用传入函数的情况下,性能可能会有所不同。
我正在尝试使用高阶函数删除一些重复代码。
这与调用单例对象方法有何不同?
示例代码:
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"))
我相信我们可以使用高阶函数做更多的事情,但我不太明白这一点。
这是使用高阶函数的正确方法吗?
有人可以通过示例给我 link 如何正确使用高阶函数吗?
您在此处的 filterDFForPaymentType 函数除了 return 您其他函数的结果外不执行任何其他操作,在这种情况下,代码可以缩短为
filterDF(df, "Manual")
filterDF(df, "Electronic")
def filterDF(df: DataFrame, paymentType: String): DataFrame = {
val filteredDF = df.where(col("paymenttypecol") === paymentType)
filteredDF
}
高阶函数在它们自己实现一些逻辑(即在集合中解构和构造集合)同时使用传入函数作为其中的一部分时很有用。在可以选择使用传入函数的情况下,性能可能会有所不同。