我是
靠谱客的博主
哭泣蜡烛,最近开发中收集的这篇文章主要介绍
groovy闭包,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Groovy是增强Java平台的唯一的脚本语言。它提供类似于Java的语法,内置映射(Map)、列表(List)、方法、类、闭包(closure)以及生成器。
Groovy是动态弱类型语言,即Groovy不要求声明变量的类型、方法的参数或者方法的返回值。这意味着在不同环境下,变量可以以多种方式使用。
Groovy类和Java是二进制兼容的。这意味着Groovy编译器产生的字节码与Java编译器产生的字节码是完全一样的。因此,对JVM而言,Groovy和Java是完全一样的。
Groovy是一门面向对象的语言。
数值和表达式
两个整数的除法运算通常会产生一个浮点数,即使其结果可能是一个整数。
如表达式6/3的结果是浮点数2.0,而不是整数2.
为了获得两个整型值相除的整数部分,必须调用intdiv方法:
13.intdiv(5)
该表达式的结果是整数2.
使用取模运算符(%)可以得到两个整数操作数相除的余数。但是对一个浮点数求模,或者对一个含有浮点数参数的整数求模都是非法的。
在Groovy中,第一次使用某个变量时,需要使用def关键字来声明变量。
变量的命名规则:可以由字母、数字和下划线组成,对大小写敏感,首字符必须是字母。
字符串和正则表达式
在Groovy中,可以使用单引号('abc')、双引号("abc")、或者三引号('''abc''')来封装字符串。使用三引号表示的字符串可以包含多行文本。
使用单引号封装的字符串的值就是所列出的字符序列本身。而在双引号和三引号中,任何包含在解释型字符串中的${expression}都将被求值,
其结果是字符串的一部分。如:
def age = 25
'My age is ${age}' //My age is ${age}
"My age is ${age}" //My age is 25
'''My age is ${age}''' //My age is 25
"My age is ${age}" //My age is ${age}
通用的原则是,只在字符串需要被解释的时候使用双引号,在其他情况下字符串使用单引号。
闭包常用方法demo,直接贴代码demo.groovy,运行时直接输入groovy demo.groovy:
-
-
-
-
-
-
- def hello = 'Hello'
- def clos = {
- param -> println "${hello}, ${param}"
- }
- def clos2 = {
- p1, p2 -> println "the parameters are ${p1} and ${p2}"
- }
-
- def demo(clo) {
- clo('zyf')
- }
-
-
- clos.call("zyf")
- clos('zyf')
- clos'zyf'
- clos2(1,2)
-
- demo(clos)
- demo clos
- demo{
- param -> println "hello , ${param}"
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1.upto(3) {
- println "abc"
- }
-
- def count = 0
- 3.upto(4) {
- p -> count += p
- }
- println "count: ${count}"
-
-
-
-
-
-
-
-
-
-
- [1, 2].each {
- println it
- }
-
- ['zhangsan' : 21, 'lisi' : 22].each {
- println it
- }
-
- ['zhangsan' : 21, 'lisi' : 22].each {
- println "${it.key} maps to : ${it.value}"
- }
-
- ['zhangsan' : 21, 'lisi' : 23].each {
- p -> if (p.value > 22) {
- println "${p.key} value over 22"
- } else {
- println "${p.key} value low 23"
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- def f = [1, 2].find {
- it -> it > 1
- }
- println "find : ${f}"
-
-
-
-
-
-
-
- def fa = ['zhangsan' : 21, 'lisi' : 23, wangwu : 24].findAll {
- it -> it.value > 22
- }
- println "find all : ${fa}"
- fa.each {
- println it
- }
-
- [1, 2, 3].findAll {
- it -> it > 1
- }.each {
- println it
- }
-
-
-
-
-
-
-
-
-
-
-
- def a = [1, 2].any {
- it -> it > 1
- }
- println "any one over 1? ${a}"
-
-
-
-
-
-
-
- def e = [1, 2].every {
- it -> it >1
- }
- println "every one over 1? ${e}"
-
-
-
-
-
-
-
- def list = [1, 2, 3, 4].collect {
- it -> return it * it
- }
- println "list: ${list}"
-
- list = (0..2).collect {
- it -> 2 * it
- }
- println "list:${list}"
-
- list = (0..<2).collect {
- it -> 3 * it
- }
- println "list:${list}"
-
- def s = ['zhangsan' : 21, 'lisi' : 22]
- list = s.collect {
- it -> ++it.value
- }
- def olderS = s.collect {
- it -> ++it.value
- return it
- }
- println "s : ${s}"
- println "list : ${list}"
- println "olderS : ${olderS}"
-
-
-
-
-
-
-
-
-
-
-
-
-
- def factorial = [2, 3, 4].inject(1) {
- previous, element ->
- println "pre: ${previous}, ele: ${element}"
- previous * element
- }
- println "Factorial(4) : ${factorial}"
-
-
-
-
-
-
-
-
-
-
- def multiply(x) {
- return {
- y -> return x * y
- }
- }
- def twice = multiply(2)
- println "twice(3) = ${twice(3)}"
-
-
-
-
-
-
-
- def swap = {
- sList, p, q ->
- def temp = sList[p]
- sList[p] = sList[q]
- sList[q] = temp
- }
- def minPosition = {
- pList, from ->
- def mPos = from
- def nextFrom = from + 1
- for (i in nextFrom..<pList.size()) {
- if (pList[i] < pList[mPos]) {
- mPos = i
- }
- }
- return mPos
- }
- def selectionSort = {
- l ->
- def size = l.size() - 1
- for (j in 0..<size) {
- def minPos = minPosition(l, j)
- swap(l, minPos, j)
- }
- return l
- }
-
- def table = [2, 4, 1, 3]
- def sorted = selectionSort(table)
- println "sorted : ${sorted}"
-
-
-
-
-
-
-
-
- println "str's length:" + "a c d d".tokenize().size()
-
-
-
-
-
-
-
- def listDir(dirFile, indent) {
- dirFile.eachFile {
- file ->
- (0..<indent).each {
- print " "
- }
- println "${file.getName()}"
- if (file.isDirectory()) {
- listDir(file, indent + 2)
- }
- }
- }
-
- def printDir(dirName) {
- listDir(new File(dirName), 0)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
- def printDir2(dirName, size) {
- new File(dirName).eachFileRecurse {
- file ->
- if (file.getName().size() > size)
- println "the file ${file.getName()} name's size over ${size}"
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- def doc = new XmlParser().parse('library.xml')
- println "${doc.book[0].title.text()}"
- doc.book.each {
- it -> println "${it.title.text()}"
- }
- doc.book.title.each {
- it -> println "${it.text()}"
- }
- println doc.book.title[0]['@id']
- println doc.book.title['@id']
-
-
-
-
-
-
-
-
-
最后
以上就是哭泣蜡烛为你收集整理的groovy闭包的全部内容,希望文章能够帮你解决groovy闭包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复