gpt4 book ai didi

scala - 具有通用返回类型的可选函数参数

转载 作者:行者123 更新时间:2023-12-02 20:57:18 25 4
gpt4 key购买 nike

您将如何实现通过正则表达式解析某些输入并将创建的字符串转换为其他类型的类?我的做法是:

class ARegex[T](regex:Regex, reform:Option[String => T]){
def findFirst(input:String):Option[T] = {
(regex.findFirstIn(input), reform) match{
case (None, _) => None
case (Some(s), None) => Some(s) // this won't compile because of type mismatch
case (Some(s), Some(fun)) => Some(fun(s))
}
}
}

class BRegex[T](regex:Regex, reform:Option[String => T]) {
def findFirst(input:String) = { //returns Option[Any] - erasure
(regex.findFirstIn(input), reform) match{
case (None, _) => None
case (Some(s), None) => Some(s)
case (Some(s), Some(fun)) => Some(fun(s))
}
}
}

最佳答案

我们可以通过消除 reform 类型的 Option 部分来解决这个问题,并使用不同的机制来表明我们不想更改以任何方式匹配。这种机制是使用identity作为默认参数,或者当你不希望类型改变时传递identity。

class ARegex[T](regex:Regex, reform:String => T = identity[String](_)){
def findFirst(input:String):Option[T] = {
regex.findFirstIn(input) match{
case None => None
case Some(s) => Some(reform(s))
}
}
}

new ARegex("something".r).findFirst("something else") //returns Option[String]
new ARegex("3".r, {x=>x.toInt}).findFirst("number 3") //returns Option[Int]

关于scala - 具有通用返回类型的可选函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238591/

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