Использую akka в Scala:
object MyActor extends Actor {
def receive = {
case "hello" => println("hello back at you")
case _ => println("huh?")
}
}
Это компилится нормально, но вот это
def receive = println("hello back at you")
дает ошибку
type mismatch;
[error] found : Unit
[error] required: MyActor.Receive
[error] (which expands to) PartialFunction[Any,Unit]
[error] def receive = println("hello back at you")
1) Почему ошибка во втором случае? Ведь
case "hello" => println("hello back at you") также ничего не возвращает, как и просто
println("hello back at you")
2) Что значит
case "hello" -- какой параметр сравнивается на соответсвие ему? Тут нет
match что-то.
G>1) Почему ошибка во втором случае? Ведь case "hello" => println("hello back at you") также ничего не возвращает, как и просто println("hello back at you")
G>2) Что значит case "hello" -- какой параметр сравнивается на соответсвие ему? Тут нет match что-то.
Это выражение определяет PartialFunction
{
case "hello" => println("hello back at you")
case _ => println("huh?")
}
Т.е. в первом случае метод возвращает PartialFunction, а во втором случае — Unit.
http://twitter.github.io/scala_school/pattern-matching-and-functional-composition.html#PartialFunction