【发布时间】:2019-08-13 15:55:32
【问题描述】:
我正在学习隐式类以及使用附加函数和定义来装饰类。
https://coderwall.com/p/k_1jzw/scala-s-pimp-my-library-pattern-example
我的问题是,如何将这些附加函数作为参数传递给另一个函数。
示例: 我像这样定义了类和隐式函数
class BlingString(string: String) {
def bling = "*" + string + "*"
def doubleBling = "**" + string + "**"
}
implicit def blingYoString(string: String) = new BlingString(string)
现在我可以在 String 对象上使用这些函数了。
"this is one".bling // prints *this is one*
"this is two".doubleBling // prints **this is two**
我想通过将这些隐式函数传递给它来创建一个通用函数,
def blingMyString(name: String, blingFunc: ???)) = name.blingFunc
这样我就可以像下面这样使用它,
blingMyString("this is one", bling)
blingMyString("this is two", doubleBling)
这是因为我在 Spark Dataframe 上有一个包含 20 多个附加函数的类。 (数据清理、数据格式化和转换)。
根据不同的场景,我必须在数据帧上执行一个或多个函数。
val out1 = df.operation1().operation2().operation3()
val out2 = df.operation1().operation3()
val out3 = df.operation1().operation4().operation3()
def clean(dynamicFn: ???): DataFrame = df.operation1().dynamicFn().operation3()
val out1 = clean(operation2)
val out2 = clean()
val out3 = clean(operation4)
提前致谢。
【问题讨论】:
-
你可以创建
implicit class,而不是像这样class+implicit def。
标签: scala apache-spark implicit