I'm sorry mate. That happens when you code at midnight in a polluted groovysh. Try this out:

def check(condition) {
  // Define and initialize a new map
  def map = [:]

  // Replace the `is` method from the map's metaclass
  map.getMetaClass().is = { bool ->
      println "checking if $condition yields $bool, with 'is'"
  }

  // Return the map
  map
}



On Wed, Oct 28, 2015 at 8:31 PM, Marc Paquette <marcpa@mac.com> wrote:
Your suggestion seemed promising, but I can’t make it work :
1) `map.metaClass` is null
2) `map.getClass().metaClass.is = null` or `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 = 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> 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> 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