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.urdan...@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.urdan...@gmail.com > <mailto:edinson.padron.urdan...@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 <mar...@mac.com > <mailto:mar...@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 > > >