Jednym z problemów, które ciągle napotykam na scalę, są wyrażenia lambda. Na przykład"Brakujący typ parametru dla funkcji rozszerzonej" podczas używania _ (podkreślenie)?
JarBuilder.findContainingJar(clazz).foreach {userJars = userJars + _ }
daje mi błąd jak:
missing parameter type for expanded function ((x$1) => userJars.$plus(x$1))
Jeśli jednak zrobić ekspansję sobie:
JarBuilder.findContainingJar(clazz).foreach {x => userJars = userJars + x }
To działa dobrze.
Czy to błąd Scala? Czy robię coś okropnie nie tak?
'_' nie znaczy to, co myślisz, że to oznacza, że nie. Jest to * specjalny * symbol w tym kontekście: * każdy inny prosty identyfikator powinien działać poprawnie *. Z powodu tej magii, 'Some (4) .foreach (_ +: List())' "działa dobrze". Aby zobaczyć, porównaj 'Some (4) .map (_ + 1)' i 'Some (4) .map (x => x + 1)'. Mam nadzieję, że jest to duplikat (i zamknięty jako taki) lub będzie odpowiednia odpowiedź, która ciągnie od SLS :) –
http://stackoverflow.com/questions/7695270/underscore-in-list-filter (good), http : //stackoverflow.com/questions/4422016/scala-underscore-minimal-function, http://stackoverflow.com/questions/6593277/concise-notation-for-single-arg-anonymous-function-avoiding-underscore-not -wor –
(Właściwie to zastanawiam się, czy istnieje * dowolny * kontekst, w którym '_' jest * nie * magiczny w * inny sposób * ...) –