【发布时间】:2018-03-06 21:29:24
【问题描述】:
我想从作为参数传递的函数中获取值并返回 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] => 需要 Option[Int]) 据我了解 res 变量是对函数的引用,我无法将它与可选的调用 get\gerOrElse 方法匹配。 此外,我可能只是不明白下划线是如何工作的并且做错了什么,我在这里使用它来将某个东西作为参数传递给函数 f,你能解释一下我在哪里犯了错误吗?
【问题讨论】:
-
抱歉,在 val test = ... 之后无法编辑问题。我还使用一些参数调用测试,例如 test("aaaa")
-
您可以编辑问题。它下面有一个编辑按钮。
-
myFunction的签名是什么样的?它似乎与foo的输入不匹配。 -
你说你想要一个
Option[Int]输出。您期望给定输入的Int值是多少? -
@Tanjin def myFunction(digits: String): Option[Int] = if(digits.matches("[0-9]*")) Some(digits.toInt) else None
标签: scala lambda functional-programming