Можно ли как-то добиться такого поведения в scala (у funcs то же имя и параметры, но они отличаются только типом возвращаемого значения и параметром типа)?
def a(i:Int): Int //1
def a[T](i: Int): Double //2
a(1) //call 1
a[Any](1) //call 2
Мотивация UPD:
Я пишу директиву akka-http auth
, которая проверяет сеанс и авторизацию запроса пользователя в зависимости от параметров разрешения.
- Когда он получает только разрешение, он предоставляет только что заверенный
User
:
def auth(perm: String): Directive1[User]
Когда он получает
Tuple
разрешения с
UUID
, он получает (каким-то образом) требуемый объект этим
UUID
, проверяет разрешение, примененное к требуемому объекту, и предоставляет этот объект, а также
User
:
def auth[Entity](tup: (String, UUID)): Directive1[(User, Entity)]
и , когда он получает тот же
Tuple
, но без параметра типа, он должен проверить разрешение, примененное к требуемому объекту, но предоставить только аутентифицированные
User
:
def auth(tup: (String, UUID)): Directive1[User]
Идея состоит в том, чтобы иметь одинаковое имя директивы для всех случаев, но кажется, что невозможно различить a[T](i: Int): Int
и a(i: Int): Double
на уровне языка (из-за стирания типа).
Может быть, есть какие-то хитрости, использующие implicits
, которые помогают достичь этого?