我想从作为参数传递的函数中获取值并返回Option [Int],之后如果我有None抛出异常并且在任何其他情况下返回值 我试着这样做:
def foo[T](f: T => Option[Int]) = {
def helper(x: T) = f(x)
val res = helper _
res match {
case None => throw new Exception()
case Some(z) => z
}
我称之为:
val test = foo[String](myFunction(_))
test("Some string")
我在匹配部分中有不匹配类型的编译错误(某些[A]传递 - [T] =>需要选项[Int]) 据我所知,res变量是对函数的引用,我无法将它与可选的调用get \ gerOrElse方法相匹配。 此外,我可能只是不知道下划线如何工作并做了一些非常错误的事情,我在这里使用它将一些东西作为参数传递给函数f,你能解释一下我犯了哪个错误吗?
答案 0 :(得分:2)
helper
是一种获取T
并返回Option[Int]
的方法。
res
是一个函数T => Option[Int]
。
Difference between method and function in Scala
您无法将功能T => Option[Int]
与None
或Some(z)
匹配。
您应该有一个Option[Int]
(例如应用于某些T
的函数)来进行此类匹配。
可能你想要
def foo[T](f: T => Option[Int]) = {
def helper(x: T) = f(x)
val res = helper _
(t: T) => res(t) match {
case None => throw new Exception()
case Some(z) => z
}
}
或只是
def foo[T](f: T => Option[Int]): T => Int = {
t => f(t) match {
case None => throw new Exception()
case Some(z) => z
}
}
或
def foo[T](f: T => Option[Int]): T => Int =
t => f(t).getOrElse(throw new Exception())