KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've found this pattern quite a few times in my code: if (doIt) object.callAMethod else object I'm wondering if there could be a syntactically more pleasing way to write the code above, especially to avoid the repetition of the object variable. Something like: // using the Scalaz "pipe" operator // and "pimping" f: T => T with a `when` method object |> (_.callAMethod).when(doIt) Unfortunately the line above fails because the type inference requires a parameter type for (_.callAMethod) . My best approach for now is this: implicit def doItOptionally[T](t: =>T) = new DoItOptionally(t) class DoItOptionally[T](t: =>T) { def ?>(f: T => T)(implicit doIt: Boolean = true) = if (doIt) f(t) else t } implicit val doIt = true object ?> (_.callAMethod) Not great because I have to declare an implicit val but this pays off if there are several chained calls: object ?> (_.callAMethod) ?> (_.callAnotherMethod) Does anyone have a better idea? Am I missing some Scalaz magic here?
Tags (comma-separated)
Save Edits
Cancel