как переопределить метод, когда у меня есть "Thunk" - PullRequest
0 голосов
/ 17 марта 2020

У меня есть thunk, который не принимает параметров и возвращает список класса Case (WhitelistRule), и метод getWhitelist, который возвращает список класса Case (WhitelistRule), как переопределить getWhitelist в основном классе?

trait AuthorizedServices {
  def getWhitelist: List[WhitelistRule]
}

  case class WhitelistRule(accountId: String, ruleName: String)

  type WhitelistRuleThunk = () => List[WhitelistRule]

class AuthorizedServicesImpl(Whitelist : => Map[String, WhitelistRuleThunk])
    extends AuthorizedServices {

    override def getWhitelist = {}

}


Я сделал это, но это несоответствие типов, требуется scala .List [WhitelistRule], найдено scala .List [WhitelistRuleThunk].

override def getWhitelist = {
     Whitelist.get("string").toList
  }

1 Ответ

3 голосов
/ 17 марта 2020

Вам нужно вызвать "thunk", чтобы получить значение. Предполагая, что WhiteList.get возвращает Option, оно выглядит следующим образом:

override def getWhitelist = {
  Whitelist.get("string").toList.flatMap(_())
}

_() является сокращением для f => f(), так что это функция, которая вызывает значение, которое ей присвоено. , который в данном случае имеет тип WhitelistRuleThunk. Так что это вызывает thunk, который возвращает List[WhiteListRule].

flatMap требуется, поскольку существует List из WhitelistRuleThunk с, и каждое правило возвращает List[WhiteListRule], поэтому простое map даст List[List[WhiteListRule]].

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