2013-06-26 50 views
0

我想通過使用less lambda來使Future的使用更有建設性。目前我正在使用map和lambda來訪問期貨的結果。對於例如爲:如何提供命名函數來映射不使用lambdas

val rateQuote = future { 
    connection.getCurrentValue(USD) 
} 
val purchase = rateQuote map { quote => 
    if (isProfitable(quote)) connection.buy(amount, quote) 
    else throw new Exception("not profitable") 
} 
purchase onSuccess { 
    case _ => println("Purchased " + amount + " USD") 
} 

而是爲每個map一個lambda(匿名函數),我想提供一個命名函數/方法來代替。我會怎麼做?例如: -

val rateQuote = future { 
    connection.getCurrentValue(USD) 
} 
def namedFunction(arg: Arg) = 
    if (isProfitable(quote)) connection.buy(amount, quote) 
    else throw new Exception("not profitable") 

val purchase = rateQuote map { quote => namedFunction } 

甚至更​​好

val purchase = rateQuote map namedFunction 

我主要擔心的是,我發現自己動太多邏輯集成到lambda表達式和調試比使用命名函數更難。

回答

6

如果我得到你的權利,應該不會有太大的困難:

def buyIfProfitable(quote: Quote) = 
    if (isProfitable(quote)) connection.buy(amount, quote) 
    else throw new Exception("not profitable") 

val purchase = rateQuote.map(q => buyIfProfitable(q)) 

或者乾脆

val purchase = rateQuote.map(buyIfProfitable) 
1

爲了增強OM-NOM-NOM的答案 - 在最壞的情況使用部分應用功能:

VAL購買= rateQuote.map(buyIfProfitable _)

相關問題