Skip to content

Instantly share code, notes, and snippets.

@akhikhl
Created September 4, 2013 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akhikhl/6435317 to your computer and use it in GitHub Desktop.
Save akhikhl/6435317 to your computer and use it in GitHub Desktop.
switch statement and closure comprehension
def isGreaterThan(a, b) { a > b }
def isGreaterThan(b) {
return { a -> isGreaterThan(a, b) }
}
def isLessThan(a, b) { a < b }
def isLessThan(b) {
return { a -> isLessThan(a, b) }
}
def x = 5
def y = 6
switch(x) {
case isGreaterThan(y):
println "$x is greater than $y"
break
case isLessThan(y):
println "$x is less than $y"
break
default:
println "$x equals $y"
}
@akhikhl
Copy link
Author

akhikhl commented Sep 4, 2013

The trick here is that single-argument versions of IsGreaterThan, IsLessThan return closures. Switch-statement “understands” closures: it passes it’s argument (x in our case) as a parameter to the closure and expects boolean result being returned from the closure.Same thing can be done via function currying, but it looks not so nice, as with function overload.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment