Как определить более краткую функцию scala - PullRequest
0 голосов
/ 19 октября 2011

Я использую библиотеку akka и предоставляю частичную функцию для реализации актером во время выполнения с помощью горячей замены.

Горячая замена akka принимает аргумент в форме PartialFunction [Any, Unit]. Я определил мой как следующее:

class Fake1Reader extends AbstractReader {

  def read: PartialFunction[Any, Unit] = {
    case readingRequest: ReadingRequest => {
      var reading: Reading = new ReadingImpl(readingRequest.getResourceId, "payload",
        Calendar.getInstance.getTime,
      readingRequest.getfrequency, readingRequest.getMappingName,
        readingRequest.getClassificationType,
      readingRequest.getReadingRequestId)
      sendConsumeMessage(reading)
    }
  }
}

поэтому, чтобы использовать эту функцию, я должен предоставить новый Fake1Reader (). Read.

Есть ли какой-нибудь более краткий способ сделать этот класс с помощью применения или расширения Function или PartialFunction?

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Как примечание стороны, это уменьшает бесполезную повторяемость:

case readingRequest: ReadingRequest => {
  import readingRequest._
  var reading: Reading = new ReadingImpl(getResourceId, "payload",
    Calendar.getInstance.getTime,
  getfrequency, getMappingName,
    getClassificationType,
  getReadingRequestId)
  sendConsumeMessage(reading)
}
2 голосов
/ 19 октября 2011

Если ваш AbstractReader не имеет состояния, вы можете определить object вместо class, чтобы избежать ненужного создания объектов при каждом использовании, и поместить свои функции там как неизменяемые val.

Кроме того, сопутствующий объект akka.actor.Actor определяет тип Receive как псевдоним для PartialFunction[Any, Unit], поэтому вы можете написать свои частичные функции следующим образом:

package foo    
object Fake1Reader extends AbstractReader {
  import akka.actor.Actor._

  val read: Receive = { 
    case readingRequest: ReadingRequest => /* implementation */
  }
}

использование:

import foo.Fake1Reader._

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