Передача синглтона в качестве аргумента в Scala - PullRequest
0 голосов
/ 16 марта 2020

У меня есть это:

final case class MyClass(....) extends G with M[MyClass]

object MyObject extends GMC[MyClass] {....}

trait GMC[A <: G with M[A]] {....}

def f(gmc: GMC[G])

f(MyObject)

Я получаю ошибку компилятора как:

Несоответствие типов: Обязательный GMC [G], найден MyObject.type

Это неправильный способ передачи синглтона?

1 Ответ

2 голосов
/ 16 марта 2020

Ответ на обновленный вопрос

Проблема заключается в определении f. Если вы удалите вызов f, вы получите это сообщение об ошибке:

аргументы типа [G] не соответствуют признаку параметра типа GM C [A <: G с M [A]] </p>

Другими словами, вы не можете использовать пустой G в качестве параметра типа для GMC, где ограничение типа для GMC равно G with M[A].

Вам необходимо ограничить тип, который принимает f, чтобы соответствовать определению GMC:

def f[A <: G with M[A]](gmc: GMC[A]): Unit = ???

Предыдущий ответ

Вам необходимо указать параметр типа для T при создании object:

object X extends T[A] {....}

Если вы сделаете это изменение, оно скомпилируется:

class A
trait T[A]
object X extends T[A] {}
def f(t: T[A]) = {}

f(X) // No error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...