Created
June 11, 2010 15:21
-
-
Save kjetilv/434620 to your computer and use it in GitHub Desktop.
A trait for setters or stupid, non-cascading objects in general
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// A simple trait: | |
trait CascadingActions { | |
implicit def tToActioneerT[T](t: T) = Actioneer(t) | |
case class Actioneer[T](tee: T) { | |
def withAction(action: (T => Unit)): T = | |
withActions(action) | |
def withActions(actions: (T => Unit)*): T = { | |
actions foreach (_ (tee)) | |
tee | |
} | |
} | |
} | |
// Yet with nice properties when you're dealing with | |
// an object that take a lot of setters, and you really | |
// wish it supported cascading: | |
def newStupid = { | |
val stupidTemporaryVariable = new StupidObject | |
stupidTemporaryVariable setSillyProperty "foo" | |
stupidTemporaryVariable setAnotherOne "bar" | |
stupidTemporaryVariable // mention it AGAIN here, just so it gets returned | |
} | |
// But instead: | |
def newStupid = new StupidObject withActions( | |
_ setSillyProperty "foo", | |
_ setAnotherOne "bar") | |
// Wow! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
re "although I think you mean..." I meant exactly what I wrote; unfortunately the helpful markup processor betrayed me. If you look at the raw text you will see the untainted vision.