我使自己熟悉groovy,并且对以下代码运行感到有些惊讶:
class Main {
static void main(String[] args) {
abc : 1
}
}
Run Code Online (Sandbox Code Playgroud)
什么abc : 1啊 我认为这可能是一张地图,如下所示:
class Main {
static void main(String[] args) {
print(abc : 1)
}
}
Run Code Online (Sandbox Code Playgroud)
导致[abc:1]被打印到控制台,但是
class Main {
static void main(String[] args) {
def map = abc : 1
}
}
Run Code Online (Sandbox Code Playgroud)
不编译!!!但最令人困惑的部分是将表达式包装到闭包中
class Main {
static void main(String[] args) {
def closure = {-> abc : 1}
print closure()
}
}
Run Code Online (Sandbox Code Playgroud)
导致1被打印到控制台而不是[abc:1]。我不知道有没有使用结肠?
我有一些问题需要理解在Geb中描述(定义)页面的语法.以下是一个工作正常的示例页面类,但我不明白它是如何工作的.
import geb.Page
class GebHomePage extends Page{
static url = "http://gebish.org"
static at = { title == "Geb - Very Groovy Browser Automation" }
static content = {
seeGuideButton { $('div', class:'ui huge primary button') }
uiHeader { $('h1', class:'ui header', 0)}
}
}
Run Code Online (Sandbox Code Playgroud)
我对内容引用的闭包内的语法感兴趣.Geb将内容DSL的语法描述为
«name»(«options map») { «definition» }
Run Code Online (Sandbox Code Playgroud)
我不明白这种语法.名称部分看起来像一个变量,但它没有声明(我想念def或类似的东西),最后一部分看起来像一个闭包.但是名称和闭包之间的联系在哪里.连接两者没有等号.在标准的groovy类中的语法
«name» { «definition» }
Run Code Online (Sandbox Code Playgroud)
不编译.在内容DSL的一行中会发生什么?究竟是什么uiHeader以及seeGuideButton它们如何与以下关闭相关?这种语法如何正常工作?