groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marc Paquette <mar...@mac.com>
Subject Re: Problem using 'is' in a command chain
Date Thu, 29 Oct 2015 01:01:06 GMT
Your suggestion seemed promising, but I can’t make it work :
1) `map.metaClass` is null
2) `map.getClass().metaClass.is <http://metaclass.is/> = null` or `Map.metaClass.is
<http://map.metaclass.is/> = null` does not remove the `is` method
3) `map[is]` gives `Caught: groovy.lang.MissingPropertyException: No such property: is for
class: …`

I am curious, you said « but it works », what version of groovy (groovy --version) did you
use ?
 

> Le 2015-10-28 à 01:08, Edinson E. Padrón Urdaneta <edinson.padron.urdaneta@gmail.com>
a écrit :
> 
> If you want to use `is` in your DSL you could try:
> 
> def check(condition) {
>   // Define and initialize a new map
>   def map = [:]
> 
>   // Remove the `is` method from the map's metaclass
>   map.metaClass.is <http://map.metaclass.is/> = null
> 
>   // Add the key-value pair we care for the DSL
>   map[is] = { bool ->
>       println "checking if $condition yields $bool, with 'is'"
>   }
> 
>   // Return the map
>   map
> }
> 
> I don't know if the above follows good practices or at very least is a good idea (remember
that I'm very new) but it works.
> 
> 
> On Wed, Oct 28, 2015 at 12:19 AM, Edinson E. Padrón Urdaneta <edinson.padron.urdaneta@gmail.com
<mailto:edinson.padron.urdaneta@gmail.com>> wrote:
> Well, I'm very new to groovy so I could be very wrong but `is` is a method of `GroovyObjectSupport`,
so maybe you are invoking that method in your DSL without knowing that.
> 
> On Tue, Oct 27, 2015 at 10:47 PM, Marc Paquette <marcpa@mac.com <mailto:marcpa@mac.com>>
wrote:
> Playing with DSL here (going through chapter 19 of « Groovy In Action, second edition
», well worth the read).  It seems that one cannot use the word ‘is’ to build a command
chain dsl, but ‘IS’ or ‘Is’ or ‘iS’ are ok… Or is it something I’m doing wrong
?
> 
> ```
> [marcpa@MarcPaquette dsl]$ groovy --version
> Groovy Version: 2.4.3 JVM: 1.8.0_60 Vendor: Oracle Corporation OS: Mac OS X
> [marcpa@MarcPaquette dsl]$ cat chainWithLowerCaseIsFails.groovy
> def check(condition) {
>     [is: { bool ->
>         println "checking if $condition yields $bool, with 'is'"
>     },
>     IS: { bool ->
>         println "checking if $condition yields $bool, with 'IS'"
>     }]
> }
> 
> cond = (1<2)
> check cond is true
> check cond IS true
> [marcpa@MarcPaquette dsl]$ groovy chainWithLowerCaseIsFails.groovy
> checking if true yields true, with 'IS'
> [marcpa@MarcPaquette dsl]$
> ```
> 
> Marc Paquette
> 
> 
> 


Mime
View raw message