这个 Kotlin 返回值是什么意思?:(产品)-> 布尔值

inc*_*nnu 2 lambda kotlin

我很难理解这是什么类型的返回值:

private fun someFun(products: List<Product>): (Product) -> Boolean {
// something
}
Run Code Online (Sandbox Code Playgroud)

这种返回值叫什么,它有什么作用?

Zab*_*uza 5

概述

(Product) -> Boolean称为函数类型。有关更多信息,请参阅官方文档

这里的关键主题是lambda高阶函数。本质上,您可以将其视为返回另一个方法的someFun方法- 或者更确切地说,可以将s 转换为s。ProductBoolean

用法

这是您的代码的完成和使用方式:

private fun someFun(products: List<Product>): (Product) -> Boolean {
  // 'it' is Product, now you have to return a Boolean
  return { it.isExpensive }
}

// and usage:
val result = someFun(products)

val foo: Boolean = result(someProduct)
val bar: Boolean = result(anotherProduct)
Run Code Online (Sandbox Code Playgroud)

所以你可以像函数一样使用它,在Products 上调用它,获得Boolean回报。

例子

用另一个更具体的例子可能更容易理解:

val wordCounter: (String) -> Int = { it.split(" ").size }

println(wordCounter("hello")) // 1
println(wordCounter("hello world")) // 2
Run Code Online (Sandbox Code Playgroud)

wordCounter是一个类型的对象(String) -> Int。它可用于将s转换 为。每当您使用它时,它都会执行您之前编写的代码(lambda)。所以它本质上就像你创建了一个函数,只是它是一个对象 - 一个函数对象StringInt