在 Scala 中,为什么我不能在这里显式使用参数类型?
In Scala, why can't I explicitly use a parameter type here?
下面的代码效果很好
List("ios","android","wm").exists(x =>"ios ok".contains(x))
但是,如果我像这样在匿名函数中添加参数类型,它会报错 type mismatch
:
scala> List("ios","android","wm").exists(x: String => "ios ok".contains(x))
<console>:1: error: identifier expected but string literal found.
List("ios","android","wm").exists(x: String => "ios ok".contains(x))
^
如果我使用 _
而不是 x
,它也不会编译:
scala>List("ios","android","wm").exists(_ =>"ios ok".contains(_))
<console>:8: error: missing parameter type for expanded function ((x) => "ios ok".<contains: error>(x))
有人对此有想法吗?
这些代码中是否发生了任何隐式类型转换?
我怎么能在这里明确地使用参数类型呢?
我在想,当编译器看到 :String => ...
时,它可能正在寻找完成像 String => A
这样的函数类型。这是由括号触发的,因为您通常在花括号内有一个类型化的匿名函数。
这些工作:
List("ios","android","wm").exists((x: String) => x.contains(x))
List("ios","android","wm").exists { x: String => x.contains(x) }
最后一点没有任何意义:
List("ios","android","wm").exists(_ =>"ios ok".contains(_))
第一个_
表示你不关心元素是什么,显然不是这样的。因此,编译器希望应用具有两个参数且参数列表为一个的函数。
你想要这个:
List("ios","android","wm").exists("ios ok".contains(_))
下面的代码效果很好
List("ios","android","wm").exists(x =>"ios ok".contains(x))
但是,如果我像这样在匿名函数中添加参数类型,它会报错 type mismatch
:
scala> List("ios","android","wm").exists(x: String => "ios ok".contains(x))
<console>:1: error: identifier expected but string literal found.
List("ios","android","wm").exists(x: String => "ios ok".contains(x))
^
如果我使用 _
而不是 x
,它也不会编译:
scala>List("ios","android","wm").exists(_ =>"ios ok".contains(_))
<console>:8: error: missing parameter type for expanded function ((x) => "ios ok".<contains: error>(x))
有人对此有想法吗? 这些代码中是否发生了任何隐式类型转换? 我怎么能在这里明确地使用参数类型呢?
我在想,当编译器看到 :String => ...
时,它可能正在寻找完成像 String => A
这样的函数类型。这是由括号触发的,因为您通常在花括号内有一个类型化的匿名函数。
这些工作:
List("ios","android","wm").exists((x: String) => x.contains(x))
List("ios","android","wm").exists { x: String => x.contains(x) }
最后一点没有任何意义:
List("ios","android","wm").exists(_ =>"ios ok".contains(_))
第一个_
表示你不关心元素是什么,显然不是这样的。因此,编译器希望应用具有两个参数且参数列表为一个的函数。
你想要这个:
List("ios","android","wm").exists("ios ok".contains(_))