1. 程式人生 > >Gradle自動化構建(三) Groovy 閉包

Gradle自動化構建(三) Groovy 閉包

閉包與字串

String str = '2 + 3 = 5,abc'
println str.each { // 2 + 3 = 5,abc2 + 3 = 5,abc , 字串的遍歷,返回值為變數 str 本身
    String tmp -> print tmp
}

println str.find { // 2 , find的閉包是 由一個String形參,返回值為boolean 的閉包,true條件成立就返回
    String s -> s.isNumber()
}

def list = str.findAll { // 找到字串中所有符合條件的字元,組成list,返回
    String s -> s.isNumber()
}
println list.toListString() // [2, 3, 5]

println str.any { String s -> s.isNumber() } // true , any 只要符合條件就返回true,否則返回false
println str.every { String s -> s.isNumber() } // false , every 表示str中每個字元都要滿足條件返回true,否則返回false
// [2,  , +,  , 3,  , =,  , 5, ,, A, B, C] , collect 對字串中每個字元進行閉包中的處理,返回處理後字元組成的集合list
println str.collect { it.toUpperCase() }.toListString()

閉包more

// 閉包關鍵變數 this 、 owner 、 delegate    都是指向其最近的類
def closure = {
    println "1this : "+this          // 1this : [email protected] , this與java中的一樣,代表閉包定義處的類
    println "1owner : "+owner        // 1owner : [email protected] , owner 代表閉包定義處的類或者物件
    println "1delegate : "+delegate  // 1delegate : 
[email protected]
, delegate 代表任意物件,預設值是 owner } closure.call() class Person { // class Person 表示定義了一個內部類 def static classClosure = { // static 表示靜態型別的閉包 println "2this : "+this // 2this : class part4.Person println "2owner : "+owner // 2owner : class part4.Person println "2delegate : "+delegate // 2delegate : class part4.Person } def static say() { def classClosure = { println "3this : "+this // 3this : class part4.Person println "3owner : "+owner // 3owner : class part4.Person println "3delegate : "+delegate // 3delegate : class part4.Person } classClosure.call() } def cc = { println "4this : "+this // 4this :
[email protected]
println "4owner : "+owner // 4owner : [email protected] println "4delegate : "+delegate // 4delegate : [email protected] } def nostatic() { def classClosure = { println "5this : "+this // 5this : [email protected] println "5owner : "+owner // 5owner : [email protected] println "5delegate : "+delegate // 5delegate : [email protected] } classClosure.call() } } Person.classClosure.call() // 呼叫內部類中的靜態成員閉包 Person.say() // 呼叫內部類中的靜態函式 Person per = new Person() per.cc.call() // 非靜態成員 呼叫 per.nostatic() def outClosure = { def innerClosure = { // 閉包中定義閉包 println "6this : "+this // 6this : [email protected] , this指向的是closureup.groovy的例項,與不巢狀的closure閉包的this是一樣的 println "6owner : "+owner // 6owner : [email protected] , owner指向的是outClosure閉包的例項 println "6delegate : "+delegate // 6delegate : [email protected] , delegate沒有修改的話,預設指向 [email protected] } innerClosure.delegate = per // 修改innerClosure閉包的delegate物件,指向person例項物件 innerClosure.call() } outClosure.call() // 在一般情況下,閉包的 this owner delegate 值都一樣 // 在閉包的閉包中, this 與 owner 值不一樣,owner 與 delegate 的值一樣 , 如果修改了delegate值, owner 就與 delegate 值不一樣了 // 閉包的 this 、 owner 的值是不能被修改的 // 閉包委託策略 class Student { String name def pretty = { "My name is $name" } } class Teacher { String name } def stu = new Student(name: 'hj') // new一個物件,並給name成員賦值 def tea = new Teacher(name: 'some') println stu.pretty.call() // My name is hj stu.pretty.delegate = tea println stu.pretty.call() // My name is hj stu.pretty.resolveStrategy = Closure.DELEGATE_ONLY // 修改閉包的委託策略(需要這兩行程式碼一起作用才行),預設值為 Closure.OWNER_FIRST // 當修改的閉包的委託策略為 DELEGATE_FIRST,如果在teacher物件中沒有與student物件的pretty閉包中的name變數一致的變數,那麼pretty.call()時還是會取student物件中的name的值 // 當修改的閉包的委託策略為 DELEGATE_ONLY,如果teacher物件中沒有name成員,那麼程式會報錯 println stu.pretty.call() // My name is some

相關推薦

Gradle自動化構建() Groovy

閉包與字串 String str = '2 + 3 = 5,abc' println str.each { // 2 + 3 = 5,abc2 + 3 = 5,abc , 字串的遍歷,返回值為變數 str 本身 String tmp -> pri

gradle學習筆記() Groovy

前言: 1. 閉包基礎: 1. 概念: A closure in Groovy is an open, anonymous, block of code that can take arguments, return a value and b

使用Jenkins+Git+Gradle自動化構建Android APK

jenkins 簡介 Jenkins是基於Java開發的一種持續整合工具,用於監控持續重複的工作,功能包括:持續的軟體版本釋出/測試專案和監控外部呼叫執行的工作。 步驟1: 1.1 下載Tomcat,建議版本6.0以上;下載Tomcat9.0.zip 1

使用Gradle自動化構建多型別apk

對於多種型別的apk包構建,通常有以下需求: 各版本有不同的程式碼、資源上述程式碼中各版本有不同的依賴各版本有不同的Manifest中元素需求各版本有不同的proGuardAndroid Studio中使用Gradle編譯多種apk包需要靠productFlavors或者buildTypes實現,如果有兩種p

python自動化--函數(函數和裝飾器)

簡單 自動 clas 技術 閉包函數 class 圖片 分享圖片 log 閉包函數 閉包函數定義,定義在函數內部的函數,特點是;包含對外部作用域而不是對全局作用域名字的引用。該函數就稱之為閉包函數。 簡單裝飾器實現 1,為什麽要使用裝飾器,開放封閉原則,對擴展是開放的,

JavaScript函數()——及作用域

閉包 n) 定義 var 成了 局部變量 val 執行函數 eid 閉包 概念 只有函數內部的子函數才能讀取局部變量,所以閉包可以理解成“定義在一個函數內部的函數“。在本質上,閉包是將函數內部和函數外部連接起來的橋梁 例子 function outer(){ var

JavaScript---設計模式與開發實踐--第

JavaScript—設計模式與開發實踐–第三章 閉包 閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高階應用都要依靠閉包實現。 對於 JavaScript程式設計師來說,閉包(closure)是一個難懂又必須征服的概念。

Android Studio之Gradle自動化構建打包

  最近一年來的工作最讓我深有感悟的就是測試動不動就是問我要測試包,弄的我實在是叫苦不堪。今天正好有個工作空檔期,也有些意外看到過些類似的博文,正好在這個工作空檔期實現了Window上跑Gradle指令碼自動構建Android專案。   首先,開發環境:     系統:Win7     Gradle版本:4.

Groovy理解

關於groovy閉包的很多講解,都是含糊不清,或者是過於“專業”, 現在,我將以一種通俗易懂的方式表述內容 先要宣告這裡所講的是groovy閉包,和其他語言的閉包固然不能相等 groovy閉包是指一個可執行的程式碼塊:(定義)           作為形式可以看成是jav

groovy科裡化引數

科裡化閉包:帶有預先繫結形參的閉包。在預先繫結一個形參之後,呼叫閉包時就不必為這個形參提供實參了。有助於去掉方法呼叫中的冗餘重複。 使用curry方法科裡化任意多個引數 使用rcurry方法科裡化後面的引數 使用ncurry方法科裡化中間引數 簡單例子: /** * Created by Jxy

Java中Lambda表示式和Groovy的相關解析

Lambda名詞釋義 Lambda表示式表示匿名函式,和匿名類對比,及不需要宣告函式的方法名和返回值,用表示式的形式完成函式的引數和相關邏輯。 Lambda表示式應用於Groovy和Kotlin中,作為實現函數語言程式設計的關鍵(函數語言程式設計是指一個函式

Gradle 自動化構建工具詳解

我是做android 開發的,所以對這個玩意要有一定的瞭解。其實,說白了就是對Groovy的學習。對於android來說,更多的是對:groovy的Project類下的函式學習。 多的不說,直接上視訊連結(視訊簡短,給力):

groovy巢狀的小陷阱

groovy的閉包特性極大的方便了程式開發,不過在巢狀閉包要稍微小心一點先認識一下Groovy閉包中有幾個隱含變數 it:預設的引數名,[color=blue]如果沒有傳引數,it為null,如果自定義了引數名,那就不存在it的定義了[/color] this : 跟Java

gradle自動化構建2 :安裝和使用gradle

  上篇我們瞭解了自動化構建,說白了,就是通過一段命令列來將手動編譯,構建轉化未程式碼自動構建,只用等待結果就行了。下面我們來進行安裝和初步使用gradle 。    Gradle 安裝 我們可以從官方網站下載gradle最新版本,下載網址為 http

Groovy

本文介紹了Groovy閉包的有關內容。閉包可以說是Groovy中最重要的功能了。如果沒有閉包,那麼Groovy除了語法比Java簡單點之外,沒有任何優勢。但是閉包,讓Groovy這門語言具有了強大的功能。如果你希望構建自己的領域描述語言(DSL),Groovy是

Groovy中return的坑

一直沉浸在Groovy的強大和方便中,稍微不注意就被坑了一把。 在each方法中return相當於Java迴圈中的continue,只會終止當前閉包中的程式碼,繼續下一次迴圈。並不會跳出迴圈外的方法。 實際應用中程式碼的邏輯往往比前面的兩段示例更復雜,如果測試不夠全面,結果

DevOps入門(自動化構建工具Gradle

一、Gradle Gradle是一個開源的專案自動化構建工具,建立在Apache Ant 和Apache Maven概念的基礎上,並引入了基於Groovy的特定鄰域語言(DSL),而不在使用XML形式管理構建指令碼。 Groovy是用於Java虛擬機器的一種敏捷的動態語言

Android GradleGroovy自動化構建入門篇

Gradle是一個基於Apache Ant和Apache Maven概念的專案自動化構建工具。它使用一種基於Groovy的特定領域語言(DSL)來宣告專案設定,拋棄了基於XML的各種繁瑣配置。 為什麼要學習它 我們知道主流的的構建工具有Ant,Mav

看懂Gradle指令碼(2)- Groovy語言的語法

本篇文章討論下面這一小段Gradle指令碼: repositories { mavenCentral() } 閉包字面量 閉包字面量看起來像Java裡的程式碼塊:用一對兒花括號包起來。前面

Gradle基礎知識——Groovy

定義閉包 def closure_name = { // closure body } 上面程式碼定義一個名為 closure_name 的閉包,用途由 closure body