Я изучаю Scala, это было так хорошо до сих пор, к сожалению, я обнаружил определенное поведение, которое я не совсем понимаю. Я надеюсь, что вы, ребята, можете дать мне некоторые подсказки, проблема возникла, когда я закодирован этот класс:понимание поведения Scala в вспомогательных конструкторах с функцией как параметр
class Point(iDim:Int,data:Array[Double],f: Array[Double] => Double) {
...
def this(idim: Int, obj :ObjectThatGenerate_ArrayofDouble, f: Array[Double] => Double){
this(idim,obj.generateArray(idim),f)
}
}
Так что, когда я использую эти конструктор в моем основном коде мне нужно сделать, это
var p:Point = new Point (idim,obj,f _)
или
var p:Point = new Point (idim,dataArray,f _)
но если я удалить ДОПОЛНИТЕЛЬНЫЙ конструктор мне нужно только построить объект вроде этого:
var p:Point = new Point (idim, dataArray, f)
Почему в scala, когда у меня есть вспомогательный конструктор, мне нужно передать частично реализованную функцию «f_», а когда у меня нет вспомогательного конструктора, я могу передать функцию непосредственно «f»? Или символ « _ "имеют в этом контексте другое значение?
Это выглядит как неудачное ограничение вывода типа, которое здесь имеет некоторые проблемы с перегруженными конструкторами. – ghik