Я делал конструктор с несколькими возможными аргументами, когда понял, что моя среда 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 не возвращает результат, а скорее целую функцию (потому что она рассматривается как объект, я полагаю).
Итак, как мне заставить этот работать, чтобы получить столбеца не тип функции, не объявляя ее отдельно?
def this(path: String, column: String) {
this(path, column.split(",").map(_ => {
col(_)
}))
}