Czy istnieje składnia pozwalająca na generyczne parametry typu w literałach funkcjonalnych? Wiem, że mogę zawinąć go w sposób taki jak:W programie Scala można używać ogólnych parametrów typów z definicjami * funkcji *?
def createLongStringFunction[T](): (T) => Boolean = {
(obj: T) => obj.toString.length > 7
}
ale potem skończyć konieczności wywołania metody dla każdego typu T i uzyskanie nowej funkcji. Spojrzałem przez odniesienie języka, a jednocześnie widzę, że składnia dosłowne funkcja jest tłumaczony przez kompilator do instancji Functionn obiektu, który sam ma ogólne typy danych wejściowych, wygląda na to magiczne kompilator realizuje te parametry w czasie kreacja. Nie znalazłem żadnej składni, która pozwoli mi w efekcie "pozostawić jeden lub więcej parametrów typu" niezwiązane ". Co wolałbym coś wzdłuż linii:
// doesn't compile
val longStringFunction: [T](T) => Boolean = (obj: T) => obj.toString.length > 7
Czy coś takiego istnieje? Lub, jeśli o to chodzi, jaki jest wyraźny typ funkcji rozszerzania eta, gdy rozszerzana metoda ma parametry ogólne?
Jest to jedynie przykład wymyślony bezużyteczny. Oczywiście mógłbym tylko użyć funkcji Any tutaj.
Dzięki, bałam się, że może być inaczej. Rozszerzenie metody w ten sposób otwiera jednak drzwi dla bardziej złożonych przypadków. Chociaż nie mogę znaleźć sposobu, aby to zrobić bez pośredniej metody, wskazówka typu przydziału może nieść to zadziwiająco daleko, na przykład: 'def doStuff [T, U] (moreStuff: T => U) (obj: T) = moreStuff (obj) czas valAndAHalf = doStuff [Int, Double] (_ * 1.5) _' , który jest dość mocno zasymilowany od jego jawnego odpowiednika 'def doStuff [T, U] (moreStuff: T => U) (obj: T): U = moreStuff (obj) val timeAndAHalf: Int => Double = (num: Int) => doStuff [Int, Double] (num => num * 1.5) (num) ' – erich2k8
Co jest powodem, że parametry typu nie mają zastosowania do obiektów funkcyjnych? –