Функция высшего порядка с 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
}

Чем это отличается от вызова той же функции с помощью метода объекта Singleton.

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

Я уверен, что мы можем сделать гораздо больше, используя функции высшего порядка, но я не очень понимаю суть.

Это правильный способ использования функций высшего порядка?

Может ли кто-нибудь дать мне ссылку для правильного использования функций высшего порядка с примерами?


person Shankar    schedule 06.12.2016    source источник
comment
В этом случае нет никакой выгоды от прямого использования функций   -  person cchantep    schedule 06.12.2016


Ответы (1)


Функция filterDFForPaymentType, которая у вас здесь, ничего не делает, кроме как возвращает результат другой вашей функции, в этом случае код можно сократить до

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

Функции более высокого порядка полезны там, где они сами реализуют некоторую логику (например, в коллекциях деконструкция и создание коллекции), используя переданную функцию как ее часть. В случае, когда переданная функция может использоваться необязательно, может быть разница в производительности.

person Gary    schedule 06.12.2016