Biorąc pod uwagę ogólną metodę register
poniżej, chciałbym zdefiniować operatora :=
jako symboliczny alias.Jaka jest najkrótsza notacja, aby zdefiniować operatora jako alias metody w Scali?
def register[Prop <: Property[_]](prop: Prop): Prop
@inline
final def :=[Prop <: Property[_]] = register[Prop] _
Początkowo chciałem napisać coś takiego:
val := = register _
Ale to daje mi podpisu funkcji Nothing => Nothing
. Moją kolejną próbą było sparametryzowanie go na typ Prop
, ale najwyraźniej działa tylko wtedy, gdy zrobię to jako def
, który może przyjmować parametry typu i przekazywać je dalej.
Idealnie chciałbym pominąć adnotację @inline
, ale nie jestem pewien, jaki kod obiektowy wykonuje z niego kompilator Scala.
Najważniejszym moim celem jest to, aby nie mieć metoda :=
powielać wszystkie części podpisu register
metody badaniem z wyjątkiem nazwy, a następnie po prostu niech byłego delegata do ostatniego.
Przekazywanie metod z powielonymi podpisami jest dokładnie tym, czego chciałem uniknąć. Zobacz mój ostatni akapit "Najważniejsze ...". Również nie chcę ręcznie przekazywać żadnych argumentów. –
@TimFriske Niestety, będziesz musiał, jeśli chcesz to zrobić. –