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...