먼저 Scala 배우 라이브러리가 Akka를 위해 사용되지 않습니다. 따라서이 답변은 매우 오래 도움이되지는 않을 것입니다. (다른 배우 라이브러리는 잠시 동안 계속 사용 가능할 것입니다. 사람들이 그것을 유지하기를 원한다면 영원히 오픈 소스이기 때문에).
어쨌든 react
메서드는 scala.actors.Actor
으로 정의됩니다. 단순히 가져 오기를 실패하거나 자신의 것으로 숨길 수 있습니다. 자신의 무엇?
글쎄,이 방법은 단지 PartialFunction[Any,Unit]
걸립니다. 당신은 정말에만 일부 기능에 액세스 할 수
def react(pf: PartialFunction[Any,Unit]): Nothing = { /*how?;*/ Actor.react(/*what?*/) }
, 당신은 당신이 원하는 것을 할 Actor.react
로 연기해야 : 그래서, 당신은해야한다. 따라서 pf
을 로깅을 수행하는 PartialFunction
으로 다시 묶어야합니다. 당신이 와서 조사받을 실제로 소비되지 않은 메시지를보고 싶다면 그래서 당신은
val qf = new PartialFunction[Any,Unit] {
def isDefinedAt(a: Any) = pf.isDefinedAt(a)
def apply(a: Any): Unit = {
log(a) // Maybe add more logic to know what a is
pf(a)
}
}
, 당신은 또한 isDefinedAt
로 더 많은 작업을 수행 할 수 있습니다.
그래서, 확실히 충분히, 나는 희망,
/*how?*/
는 (생성)
qf
를 정의하기 위이며,
/*what?*/
은
qf
입니다.
a
이 사례 클래스인지 여부를 알고 싶다면 답을 (의도적으로) 할 수 없다는 것입니다. 사례 클래스는 일반적인 스칼라 (Scala) 기능 위에 구문적인 설탕 일뿐입니다. 당신이 타이핑하는 것을 막을 수 있습니다. 예를 들어, this question을 참조하십시오. 당신은 정말 멋진 얻고 싶은 경우에 copy
가 같은 수와 종류의가있는 경우
case class M(i: Int)
val a: Any = M(5)
scala> a match {
case p: Product if p.getClass.getMethods.exists(_.getName=="copy") => println("Yes")
case _ => println("No")
}
Yes
가 확인 :
그러나 그것은 copy
방법이 있는지 여부를 꽤 Product
에 대한 패턴 매칭 가까이하고 확인 얻을 수 있습니다 매개 변수를 생성자로 사용합니다.
관련해서? http://stackoverflow.com/questions/13329535/implicitly-logging-messages-received-by-an-actor-in-scala – Brian