It's a feature provided by closure.
For example, you can try this in groovy shell (groovysh):
groovy:000> a = [name: {return "Jack Sparrow"}] ===> {name=groovysh_evaluate$_run_closure1@26a0e990} groovy:000> a.name ===> groovysh_evaluate$_run_closure1@26a0e990 groovy:000> a.name() ===> Jack Sparrow groovy:000> a.name.call() ===> Jack Sparrow
But then, I was a bit confused by this:
groovy:000> a = [size: {return 5}] ===> {size=groovysh_evaluate$_run_closure1@707efa96} groovy:000> a.size ===> groovysh_evaluate$_run_closure1@707efa96 groovy:000> a.size() ===> 1 groovy:000> a.size.call() ===> 5
Huh? Why is a.size() == 1?
I expected it to give 5.
But only when I added another closure, it dawned on me.
groovy:000> a = [age: {return 29}, size: {return 5}] ===> {age=groovysh_evaluate$_run_closure1@71257687, size=groovysh_evaluate$_run_closure2@5288d319} groovy:000> a.age ===> groovysh_evaluate$_run_closure1@71257687 groovy:000> a.age() ===> 29 groovy:000> a.age.call() ===> 29 groovy:000> a.size ===> groovysh_evaluate$_run_closure2@5288d319 groovy:000> a.size() ===> 2 groovy:000> a.size.call() ===> 5
It might be very trivial to someone who's more familiar with groovy language, but it stumped me for a while.
Can you figure out what was going on?
No comments:
Post a Comment