Learning Groovy讀書筆記 DSL

2021-10-24 08:10:03 字數 2327 閱讀 6273

command chains

overriding operators(操作符過載)

疑問設定closure的delegate為某個類, 使得closure具有了delegate的類的方法。

次方法在gradle中非常常見, 例如:

package org.gradle.api.artifacts;

...public

inte***ce

configuration

extends

filecollection

, hasconfigurableattributes

build.gradle

configurations.all

// cache dynamic versions for 10 minutes

cachedynamicversionsfor 10*60

,'seconds'

// don't cache changing modules at all

cachechangingmodulesfor 0

,'seconds'

}}

下面是乙個例項:

import groovy.transform.

*import groovy.lang.delegatesto

import

static groovy.lang.closure.

*@canonical

class

smsdef

to(string tonumber)

defbody

(string body)

defsend()

defstatic

send

(@delegatesto

(strategy=delegate_first, value=sms.

class

) closure closure)}

sms.send

執行結果如下:

send  sms(tom, peter, hello)
通過設定函式的返回值為"this",可以鏈式呼叫函式。由於groovy可省略括號,更加貼近自然語言。例如:

import groovy.transform.

*import groovy.lang.delegatesto

import

static groovy.lang.closure.

*@canonical

class

smsdef

to(string tonumber)

defbody

(string body)

defsend()

defstatic

send

(@delegatesto

(strategy=delegate_first, value=sms.

class

) closure closure)}

sms.send

執行結果如下:

send  sms(tom, peter, hello)
通過操作符過載,可以使用操作符(±*/等)來操作領域物件,更加貼近於人們的思考問題的習慣。例如:

class 二十

}class 十

def string tostring()

defstatic

call()

}println "十 + 十 = $"

執行結果為:

十 + 十 = 20
過載時的operator和方法的對映關係如下:

delegatesto的解析策略(strategy)delegate_first和delegate_only貌似沒有區別??例如,如下的**:

class

test

cl.delegate = data

cl.resolvestrategy = closure.delegate_first

cl()

}}newtest()

.run

()

不管是delegate_first還是delegate_only都會報錯。

但是owner_first和owner_only的動作就和預想的一致。

物理讀,邏輯讀,預讀

在使用set statistics io on語句統計i o時候,我們會看到類似下面的結果 掃瞄計數 1,邏輯讀取 2 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。那麼它們代表什麼呢?預讀 用於估計資訊,去硬碟讀取資料到快取。物理讀 ...

髒讀,不可重複的讀,虛讀

引用 髒讀dirty reads 當事務讀取還未被提交的資料時,就會發生這種事件。舉例來說 transaction 1 修改了一行資料,然後 transaction 2 在 transaction 1 還未提交修改操作之前讀取了被修改的行。如果 transaction 1 回滾了修改操作,那麼 tr...

C 檔案讀(逐行讀 逐單詞讀)

include include include include include using namespace std int main ifile.clear ifile.seekg 0 檔案重定位 while ifile word coutvector iterator it text.begi...