Hello, all I tried to define a global variable in a Groovy script. Section 1.1. of the "Semantics" documents says that one way to define a variable is via its type, so I defined one in the global scope of my script:
String test void func() { println(test) } test = 'hello' func() but it failed with the error: "No such property: test for class: Script1". That didn't explain to me what the problem was, but I learned that the script was looking for a property named `test' in the global autogenerated Script class. OK, thought I, I will give it what it asks, and cosulted section 1.6.2. (Properties) of the "Object orientation" document, which told me that the definition of a property is identical to the definition of a variable I used above, i.e. that String test defienes a string property `test' or a string variable `test', depending on context. I was now stuck and resorted to an internet search, which brought up the following page Groovy Variable Scope: https://www.baeldung.com/groovy/variable-scope where I read: Scopes in Groovy follow, above all, the rule that all variables are created public by default. This means that, unless specified, we'll be able to access any variable we created from any other scope in the code. Why, then, is `test' inaccessible from the function in my script? And below: The easiest way to create a global variable in a Groovy script is to assign it anywhere in the script without any special keywords. We don't even need to define the type: x = 200 After I removed the "String test" line from my script it started to work, but why? I returned to the "Semantics" document and read section 1.2. (Variable assignment) to see whether the assignment operator may have the side effect of defining a missing variable, but there is no indication that it has. Can you please explain to me, preferable with the correspoding references to official documentation, why my scirpt does not work whereas the modified one does?