使用 kotlin 在函数内返回一个函数(返回一个字符串)

我试图在函数内部返回一个函数(返回一个字符串),但是,因为我没有明确说明(我不知道如何让它知道它会返回一个函数),结果我得到了 kotlin.Unit。

这是函数:

fun takeOutArticle(code:String) {

       fun onSuccess(finalPrice: Int): String {
           return "Your price is $finalFee."
       }

       fun onError(): String {
           return "Error."
       }

       val articlesCode = house.articles.find{ it.code == code }
       if (articlesCode != null) {
           val finalPrice = calculatePrice(
               articleType = articlesCode.articleCode,
               finalTime = articlesCode.finalTime.toInt(),
               hasCard = !articlesCode.Card.isNullOrEmpty())

           onSuccess(finalPrice)
       } else {
           onError()
       }

因此,当我调用该函数以及它是否成功时,它会返回 unit 但我需要它返回 onSuccess 或 onError 中的字符串。我怎样才能做到这一点?谢谢你。

阿曼宁
  1. 从函数返回值时,您必须在函数签名中指定返回类型(在名称和参数之后)。来源:函数语法
  2. 除了 lambdas 之外,您还需要在返回值/表达式前添加一个 return 关键字。请注意,这if/else是一个表达式。
  3. 请注意,您可以返回内部函数的结果,但要注意您的措辞,因为在 Kotlin 中,您还可以返回对函数的引用

示例(您可以在此处执行):

import kotlin.random.Random

fun doStuff() : String {
    fun resultIfTrue() : String { return "Returns True" }
    fun resultIfFalse() : String { return "Returns False" }
    
    return if (Random.nextBoolean()) {
        resultIfTrue()
    } else {
        resultIfFalse()
    }
}

fun deferStuff() : () -> String {
    fun resultIfTrue() : String { return "Returns True"; }
    fun resultIfFalse() : String { return "Returns False"; }
    
    return if (Random.nextBoolean()) {
        ::resultIfTrue
    } else {
        ::resultIfFalse
    }
}

fun main() {
    println("Return result of inner function")
    for (i in 0 until 4) println(doStuff())
    println("Return inner function")
    for (i in 0 until 4) {
        val fn = deferStuff()
        println("Function returned another function: $fn that must be executed: ${fn()}")
    }
}

上面的代码片段打印:

Return result of inner function
Returns False
Returns False
Returns True
Returns True
Return inner function
Function returned another function: function resultIfFalse (Kotlin reflection is not available) that must be executed: Returns False
Function returned another function: function resultIfFalse (Kotlin reflection is not available) that must be executed: Returns False
Function returned another function: function resultIfFalse (Kotlin reflection is not available) that must be executed: Returns False
Function returned another function: function resultIfTrue (Kotlin reflection is not available) that must be executed: Returns True

您可以看到输出的前半部分直接显示了内部函数产生的值,因为它们是doStuff直接从内部调用的

然而,在第二种情况下,我们已经返回了内部函数本身,它需要稍后由用户(这里是main函数)调用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 Nginx 容器返回一个字符串

使用CASE查找某个整数并返回一个字符串

使用 HQL 返回一个字符串

从 AsyncTask 返回一个字符串以在另一个活动中使用?

使用 exec() 函数创建一个字符串,一个类的名称?(Python)

使用 Javascript 搜索字符串并返回下一个字符串

使用PHP从另一个字符串返回预选单词的字符串

使用while循环Java返回一个字符串,其中的字符一个接一个地出现

使用scanf一次返回一个字符串,以特定字符分隔

在构造函数中创建一个字符串数组并在主函数中使用它

使用bash脚本如何检查一个字符串是否在另一个字符串内

使用JQuery类选择器调用.text()返回一个字符串而不是数组

使用Documents.Open的宏不会返回文档,而是一个字符串。

Swift - 使用 Vapor 3 在 POST 请求中返回一个字符串

如何使用 GetWindowsDirectoryA 返回结果来具体化一个字符串?

使用Scala和Spray.io从Future onComplete案例返回一个字符串

使用日期函数创建一个字符串,在日期和月份前添加零

不使用内置函数将一个字符串中的字符替换为另一个字符串

分割一个字符串,并使用python3将第一个参数传递给elif块中的函数

使用MySQL函数将字符串的第一个字符移动到字符串的末尾

从正则表达式返回的字符串无法在使用运算符python的另一个字符串中找到

当我从 Python 将数据导出到 csv 时,文件是空白的。当我使用 Print 函数查看数据时,返回第一个字符串

使用If函数,如何将数据框中的文本字符串更改为另一个字符串?

尝试使用两个指针反转一个字符串

排序一个字符串数组,使用另一个字符串数组确定顺序

使用动态中的指针将一个字符串复制到另一个字符串

Java使用嵌套循环在另一个字符串中查找一个字符串出现的次数

使用数组和foreach循环从另一个字符串中获取一个字符串

如何使用另一个字符串作为密码来加密/解密一个字符串?