当前位置: 首页 > 工具软件 > Groovy PDF > 使用案例 >

《Groovy入门经典》笔记

尉迟清野
2023-12-01
[b]第4章 列表、映射和范围[/b]

在映射字面值中,如果某个元素的关键字是一个变量名,那么它将被解释成一个String值。
在下面的范例中:

def x = 1
def y = 2
def m = [x :y, y : x]

于是,m就是映射:

m = ['x' : 2, 'y' : 1]

Groovy User Guide的描述:
[quote]Map keys are strings by default: [a:1] is equivalent to ["a":1]. But if you really want a variable to become the key, you have to wrap it between parentheses: [(a):1].[/quote]
[b]事实上在映射字面值中Groovy没有把Key当作变量(当Key看起来像个变量时),而只是当成是字符串,这跟Javascript是类似的,除了为变量为上括号外的方法可以把变量作为Key,另一个方法通过map[key]=value方法设置。
而在Javascript中只有第二方法才可行,如:[/b]

var field = 'fooVar';
var value = 'barVar';
$.post('/path/to/url', { field:value, 'fooString':'barString' });

// Actual result
field = barVar
fooString = barString

// Expected result
foo = barVar
fooString = barString

// 正确的写法应为
var field = 'fooVar';
var value = 'barVar';
var postData = {};
postData[field] = value;
postData['fooString'] = 'barString';
$.post('/path/to/url', postData);


定义空映射:

def map = [:]

相当于Java代码:

Map map = new HashMap();


定义范围:

def r = 1..100

注意:
1.定义中没有[],如果定义时使用了[]即会定义成列表;
2.在操作列表时使用[],实际上是表示对getAt跟putAt的调用,与定义无关。


[b]第7章 方法[/b]

当某个方法的声明含有默认参数时,默认参数仅能出现在非默认参数之后。

def someMethod(para1, para2 = 0, para3 = 0){
// Method code goes here
}

当调用方法未传递某个参数时使用默认参数(如果有),传递null时不使用默认参数:

def sayHello(name = 'Ken'){
println "Hello, $name"
}
sayHello('Dean') // Hello, Dean
sayHello() // Hello, Ken
sayHello(null) // Hello, null


[b]第8章 流程控制[/b]

case表达式既可以表示某个整型值,也可以表示整形值的范围。实际上,case表达式还可以是一个字符串、列表、正则表达式或者某些类的对象(参见第12章)。

[b]第9章 闭包[/b]
1.闭包可以引用它定义时候可见的变量:

def greeting = 'Hello'
def clos = {param -> println "${greeting} ${param}"} // 可访问到greeting

def demo(clo){
def greeting = 'Bonjour' // 此greeting不可见
clo.call('Ken')
}

demo(clos)

执行结果为:
Hello Ken
2.方法调用时如果有传递参数则可以省略圆括号,如以下代码的3与4:
3.Groovy为方法调用闭包提供了一个简化方案,这使得代码相对简单易懂——如果方法调用的最后一个参数是闭包,即可以将它从参数列表中删除,并放到其后的括号中去,前提是使用闭包字面值而不是引用,如以下代码的1与2:

def greeting = 'Hello'
def clos = {param -> println "${greeting} ${param}"}

def demo(clo){
def greeting = 'Bonjour'
clo.call('Ken')
}

//demo()clos // 1.错误
demo(){param -> println "Welcome ${param}"} // 2.正确

demo clos // 3.正确
demo {param -> println "Welcome ${param}"} // 4.正确


由于闭包也是一个对象,所以闭包也有以下特性:
1.作为方法的参数;
2.调用其它闭包;
3.作为其它闭包的参数;
4.作为方法的返回值;
5.作为其它闭包的返回值;
6.包含嵌套其它闭包。

[b]第12章 类[/b]
[url]http://blog.csdn.net/hivon/article/details/2346165[/url]
 类似资料: