scala - Scala:如何调用多态的泛型函数
问题描述
我有以下代码
def findFirst[A](as: Array[A], p: A => Boolean): Int = {
def loop(n: Int): Int =
if (n >= as.length) -1
else if (p(as(n))) n
else loop(n+1)
loop(0)
}
def main(args: Array[String]): Unit = {
val as = Array("foo", "bar", "zed")
}
我不明白如何在 main 方法中调用函数findFirst 。
提前致谢!
解决方案
该函数接受两个参数,一个数组和一个“谓词”(一个函数本身接受一个参数并返回一个布尔值)。
因此,findFirst
它是一个高阶函数(它将其他函数作为参数或返回函数)。
例如,您可以这样称呼它
def isPrime(n: Int): Boolean = ??? // implement some code to return true for prime numbers
findFirst(Array(1,2,3,4,5), isPrime)
或(使用匿名的内联函数)
findFirst(Array("x", "ab", "abc"), x => x.length > 1 )
正如您所指出的,findFirst
是一个具有变量 type 的泛型函数A
。通常(如上面的示例中,编译器可以A
从函数参数中推断出您想要的类型)。
如果不能,您可以明确:
findFirst[Int](Array(), isPrime)
推荐阅读
- asp.net-core - 如何在返回不同类型的同时反序列化 JSON?
- google-bigquery - data.tables 为空 - DataStudio 中的社区可视化
- java - 当鼠标与 Graphics2D 一起移动时,如何显示 X 和 Y 鼠标位置?
- c++ - 如何有条件地将元素添加到 std::array - C++11
- postgresql - 多单元多属性的数据库设计
- java - Android 为什么应用程序可以在具有真实设备的 Android Studio 上运行但上传到商店后出现错误
- nginx - 使用 Openresty 向 Google Analytics 发送 http 请求
- backendless - 连接 ECONNREFUSED - 无后端
- c++ - C ++ python扩展程序终止后“损坏的双链表”
- windows - 桌面快捷方式的位置存储在哪里?