Podczas tworzenia mapy funkcji String na częściowe natknąłem się na nieoczekiwane zachowanie. Kiedy tworzę częściową funkcję jako element mapy, to działa dobrze. Kiedy przydzielam do wartości val, wywołuje ona zamiast tego. Próba wywołania kontroli generuje błąd. Czy to jest oczekiwane? Czy robię coś głupiego? Skomentuj numer check()
, aby wyświetlić wywołanie. Używam Scala 2.7.7Kiedy funkcja częściowa scala nie jest funkcją częściową?
def PartialFunctionProblem() = {
def dream()() = {
println("~Dream~");
new Exception().printStackTrace()
}
val map = scala.collection.mutable.HashMap[String,()=>Unit]()
map("dream") = dream() // partial function
map("dream")() // invokes as expected
val check = dream() // unexpected invocation
check() // error: check of type Unit does not take parameters
}
Dzięki za pomoc. Kiedy zamieniłem swoje rozmowy marzeń() ze snem() _ zachowywało się tak, jak się spodziewałem. Wyjdę i przeczytam więcej o PartialFunctions, więc nie użyję ponownie tego terminu. –