Dies ist etwas, auf das ich häufig stoße, aber ich kenne die elegante Art nicht. Ich habe eine Sammlung von Foo-Objekten. Foo verfügt über eine Methodenleiste(), die ein Null- oder ein Bar-Objekt zurückgeben kann. Ich möchte die Sammlung scannen, die bar() -Methode jedes Objekts aufrufen und beim ersten Objekt anhalten, das eine tatsächliche Referenz zurückgibt und diese Referenz vom Scan zurückgibt.best scala idiom für find & return
Offensichtlich:
foos.find (.! _ Bar = null) .bar
funktioniert der Trick, sondern ruft #bar zweimal.
Gibt es einen Unterschied zwischen dieser und einer Projektion? – IttayD
Memoisierung von Stream [T] ist der Unterschied 'val mapped = foos.elements.map (_. Bar); mapped.find (_! = null); mapped.find (_! = null) 'gibt' Some (bar say 4) 'und' None' zurück mit 'val mapped = foos.projection.map (_. bar); mapped.find (_! = null); mapped.find (_! = null) 'gibt zweimal' Some (bar say 4) 'zurück. –
'foos.view' in Scala 2.8 gibt das selbe wie' foos.projection' zurück, wertet aber die Elemente zweimal aus (keine Memoisierung). –