0

我想Future通过使用更少的 lambda 来使我的 s 使用更具建设性。目前我正在使用 map 和 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我不想为 each 提供一个 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 中,并且调试比使用命名函数更难。

4

2 回答 2

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)
于 2013-06-26T15:06:23.387 回答
1

为了增加 om-nom-nom 的答案 - 最坏的情况是使用部分应用的函数:

val purchase = rateQuote.map( buyIfProfitable _ )

于 2013-06-26T16:29:21.963 回答