我有一套它們都具有一個共同的返回類型的功能,但不同的數量和類型的參數,例如:是否有可能推遲使用不同數量/類型的參數評估函數文字?
def find(id: Int): MyVal = {}
def like(part: String, max: Int): MyVal = {}
def first(): MyVal = {}
所有這些都需要通過一個共同的驗證程序,而且我會喜歡做的是到該邏輯封裝成一個單一的功能,然後採用任何上述方法的(和其他有同樣返回類型)作爲附加參數:
def checkAndEvaluate(token: String, func:() => MyVal): MyVal = {
validateToken(token) match {
case Pass => func()
case Fail => // Do some error handling
}
}
換句話說,我想傳遞函數文字,連同他們需要的參數,然後只讓他們在驗證通過時評估來自內部的接收功能。
這是可能的斯卡拉做的,如果是這樣,這將是實現它的首選方式?
我喜歡你的方法,它的工作原理,但是,我不是scala中的call-by-name語義的粉絲,因爲當你調用函數時,你不知道它發生了什麼,只是在函數中定義。在生產代碼中出現了幾次這樣的問題,因爲懶惰不是很明顯。這更簡潔,我很欣賞:) +1 – Noah 2014-09-30 15:18:02