gpt4 book ai didi

scala:如何以功能方式处理选项

转载 作者:行者123 更新时间:2023-12-01 13:39:58 25 4
gpt4 key购买 nike

我是 scala 的新手,所以我的问题可能完全是愚蠢的。如果我有如下所示的现有方法。我将这 4 行添加到方法中。有没有更好的方法来处理期权值(value)?

def processData(input: String, dataMap: Map[String, String]): Option[String] = {

//4 lines I am adding.
val data: Option[String] = dataMap.get(input)
if (data.isEmpty) {
return None
}

//how to avoid this line
val dataValue = data.get

//20-25 lines of code in here with bunch of pattern matching case statements
cleanData(dataValue)
doSomethingElse("apple", dataValue, "test")
}

基本上我想避免在下面的代码中执行“data.get”。不知何故,这样称呼是不对的。我可以使用模式匹配以不同的方式编写它,如下所示。但是 20-25 行代码有一堆 case 语句,我不想​​在它们之上创建另一个层。

def processData(input: String, dataMap: Map[String, String]): Option[String] = {

dataMap.get(input) match {

case Some(dataValue) => {
//20-25 lines of code in here with bunch of pattern matching case statements
cleanData(dataValue)
doSomethingElse("apple", dataValue, "test")
}
case None => None
}

有什么想法吗?

最佳答案

实际上你的第二种方式是函数式风格,但为了简洁起见,你可以使用 Option 高阶函数之一:

  def processData(input: String, dataMap: Map[String, String]): Option[String] = 
dataMap.get(input).map { dataValue =>
cleanData(dataValue)
doSomethingElse("apple", dataValue, "test")
}

你甚至可以避免点和括号:

  def processData(input: String, dataMap: Map[String, String]): Option[String] = 
dataMap get input map { dataValue =>
cleanData(dataValue)
doSomethingElse("apple", dataValue, "test")
}

关于scala:如何以功能方式处理选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com