我正在尋找執行類似操作的最易讀的方式:
def f1(x: Int) = x 1
def f2(x: Int) = x 2
def f3(x: Int) = x 3
val x = 1
val result = f3(f2(f1(x)))
我知道我可以做一些中間變數來提高可讀性,但想知道是否有更好的方法。
我在 Spark 中使用它,其中每個函式都向初始資料框添加一個新列。
uj5u.com熱心網友回復:
正在使用“scala方式” compose(我從您的示例中更改了函式型別,以便更清楚發生了什么):
def f1(x: Int) = x 1
def f2(x: Int) = x.toString
def f3(s: String) = "foobar: " s
val combined = f3 _ compose f2 _ compose f1 _
val result = combined(0) // "foobar: 1"
uj5u.com熱心網友回復:
像這樣的東西?
val functions: List[DataFrame => DataFrame] = List(
f1,
...
fn
)
functions.foldLeft(initialDF) {
case (acc, f) =>
f(acc)
}
uj5u.com熱心網友回復:
@Dima 描述的解決方案是撰寫 Scala 代碼的絕佳方式。
雖然如果你想保持 fluent-API 流,你也可以使用scala.util.chaining.pipe讓它從左到右讀取,如下所示:
import scala.util.chaining._
def f1(x: Int) = x 1
def f2(x: Int) = x.toString
def f3(s: String) = "foobar: " s
val result = f1(0).pipe(f2).pipe(f3)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/453080.html
