小编Sam*_*raf的帖子

Groovy的“ name:expression”语法的不同行为

我使自己熟悉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]。我不知道有没有使用结肠?

groovy

3
推荐指数
1
解决办法
70
查看次数

有人可以解释geb页面内容DSL中的语法吗?

我有一些问题需要理解在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它们如何与以下关闭相关?这种语法如何正常工作?

syntax dsl groovy spock geb

2
推荐指数
1
解决办法
100
查看次数

标签 统计

groovy ×2

dsl ×1

geb ×1

spock ×1

syntax ×1