当我意识到我的 IDE 指出了类型差异时,我正在创建一个具有多个可能参数的构造函数:
case class PathAndColumns(path: String, column: Array[Column]) {
def this(path: String, column: Column) {
this(path, Array(column))
}
def this(path: String, column: String) {
this(path, column.split(",").map( _ => col(_))) // : Array[String=>Column]
}
所以我尝试只传递col函数。
def this(path: String, column: String) {
this(path, column.split(",").map(col)) // I work!
}
它有效,然后,试图理解为什么,我最终得到:
def this(path: String, column: String) {
this(path, column.split(",").map(letsSee)) // I work as well
}
def letsSee(myStringCol: String): Column = {
(() => col(myStringCol))() // A pair of extra parenthesis to simulate a call
}
所以我发现将匿名函数传递给像map这样的方法不会返回结果,而是返回整个函数(因为我想它被视为对象)。
那么,如何在不单独声明的情况下使这项工作成为 Column 而不是函数类型呢?
def this(path: String, column: String) {
this(path, column.split(",").map(_ => {
col(_)
}))
}