Another option in code reuse in Groovy.

examples/groovy/c/main.groovy


println('before')
evaluate(new File("tools.groovy"))
println('after')
println(answer)     // 42

// println(pi)

hi()

examples/groovy/c/tools.groovy

println("in tools")

def hi() {
    println('hello')
}

answer = 42

def pi = 3.14

When we run groovy main.groovy

Using the def keyword to define a variable will make it inaccessible from the file that evaluated this code:

Caught: groovy.lang.MissingPropertyException: No such property: pi for class: main
groovy.lang.MissingPropertyException: No such property: pi for class: main
	at main.run(main.groovy:7)

Probably for the same reason functions defined in the other file cannot be accessed from the evaluating file.

Caught: groovy.lang.MissingMethodException: No signature of method: main.hi() is applicable for argument types: () values: []
Possible solutions: is(java.lang.Object), wait(), run(), run(), any(), find()
groovy.lang.MissingMethodException: No signature of method: main.hi() is applicable for argument types: () values: []
Possible solutions: is(java.lang.Object), wait(), run(), run(), any(), find()
	at main.run(main.groovy:9)