Nie jestem ekspertem od Scala i jestem zdezorientowany co do składni wywołania metody z niejawnym parametrem.Różnice w "prozie" i "notacji kropkowej" podczas wywoływania metody z (jawnymi) niejawnymi parametrami
Oto moja sytuacja:
Mam RDD Spark takiego:
val myData: RDD[Array[String]] = ...
i określiły zamawiania dla niego:
object MyOrdering extends Ordering[Array[String]] = ...
Chcę, aby filtrować tę RDD i podjąć górne n wpisów w RDD według mojego zamówienia. Iskra RDD ma sposobu podejmowania najlepszymi wpisy N z tym podpisem:
def top(num: Int)(implicit ord: Ordering[T]): Array[T]
Początkowo próbowałem ten kod
myData filter { D =>
D(9) == "yes"
} top(50)(MyOrdering)
która nie z tego błędu:
error: Int(50) does not take parameters
} top(50)(MyOrdering)
jednak ten kod działa:
myData.filter(D => D(9) == "yes").top(50)(MyOrdering)
Na pierwszy rzut oka próbka kodu uszkodzonego i działająca próbka kodu wyglądają tak, jakby określały logikę równoważną. Czy ja tu się mylę? Czy właściwie robię coś innego w dwóch próbach kodu? Czy jest to problem z tym, jak kompilator Scala analizuje kod?
Błąd oznacza, że pierwszy jest parsowany podobnie do '(mój filtr danych {D => D (9) ==" tak "} u góry) (50 (MyOrdering))', gdzie '(50)' nie jest brany jako sam parametr metody. Zgłoszony błąd można na przykład odtworzyć minimalnie za pomocą '50 (" Hello! ")'. Oznacza to, że nawet bez niejawnej (dodatkowa lista parametrów), jak to parsować? Czy tylko ten dodatek zmienia zachowanie składni? – user2864740
Bez niejawnej listy parametrów działa dobrze, na przykład działa: 'niejawny val myOrd: Kolejność [Array [String]] = MyOrdering' ' mój filtr danych {D => D (9) == "tak" } top (50) ' –
Prostszym przykładem bez iskry byłby filtr' List (1, 2, 3, 4) (_> 2) sortBy (_ * -1) (scala.math.Ordering.Int) ' –