如何从Kotlin中的一个函数返回3个独立的相同类型的数据值(< code>Int)?
我试图返回一天中的时间,我需要将小时,分钟和秒作为单独的整数返回,但是从同一个函数一次性返回,这可能吗?
在swift中,我们像跟随一样做,
func getTime() -> (Int, Int, Int) {
...
return ( hour, minute, second)
}
我们能在科特林实现这个目标吗?
P、 S:我知道我可以使用数组或Hashmap,但我想知道Kotlin中是否存在类似Swift的东西。
虽然通常,一个函数只能返回一个值,但在静态编程语言中,通过利用Pair类型和析构声明的优势,我们可以从一个函数返回两个变量。考虑以下示例:
fun getUser():Pair<Int,String> {//(1)
return Pair(1,"Mahabub")
}
fun main(args: Array<String>) {
val (userID,userName) = getUser()//(2)
println("User ID: $userID t User Name: $userName")
}
来自: 功能性 Kotlin 书籍
您似乎知道创建一个特定类来处理时间的明显答案。因此,我猜您是在试图避免创建类或访问数组的每个元素等小麻烦,并在寻找额外代码方面的最短解决方案。我建议:
fun getTime(): Triple<Int, Int, Int> {
...
return Triple( hour, minute, second)
}
并将其与解构一起使用:
var (a, b, c) = getTime()
如果您需要4或5个返回值(您不能解构超过5个),请使用Array
:
fun getTime(): Array<Int> {
...
return arrayOf( hour, minute, second, milisec)
}
和
var (a, b, c, d) = getTime()
附言:解构时您可以使用比值更少的变量,例如var(a, b)=getTime()
,但您不能使用更多,否则您将获得ArrayIndexOutOfBoundsException
在Kotlin中不能创建任意的元组,相反,可以使用数据类。一种选择是使用内置的< code>Pair和< code>Triple类,它们是泛型的,可以分别保存两个或三个值。您可以将这些与析构声明结合使用,如下所示:
fun getPair() = Pair(1, "foo")
val (num, str) = getPair()
您还可以对List
或Array
进行分解,最多可用于前5个元素:
fun getList() = listOf(1, 2, 3, 4, 5)
val (a, b, c, d, e) = getList()
然而,最惯用的方法是定义自己的数据类,它允许您从函数返回有意义的类型:
data class Time(val hour: Int, val minute: Int, val second: Int)
fun getTime(): Time {
...
return Time(hour, minute, second)
}
val (hour, minute, second) = getTime()
用Python我可以写: 如何用静态编程语言编写?
我想为我的游戏创建一个简单的倒计时,当游戏开始时,我想每秒调用这个函数: 我试过这个: 但应用程序不幸停止,第二次调用run函数 3周前,我刚刚开始使用android开发和静态编程语言,到目前为止,我对它了解最多。 在Xcode中使用swift时,我使用了这一行,我认为类似的东西也适用于Kotlin
我知道内联函数可能会提高性能 编译器可以发出以下代码,而不是为参数创建函数对象并生成调用。(来源) 但是我发现没有kotlin为一个非内联函数创建的函数对象。为什么?
我正在学习静态编程语言,我在函数方面有一些问题。我试图创建一个带有通用参数的函数接口。Java我会创建这样的东西: 然后我可以在其他地方像这样使用它(给定扩展: 你是怎么和Kotlin写这篇文章的? 我尝试的第一件事是使用如下类型别名: 但是,当我将绑定添加到type参数时,它停止了工作: 第二种方法是编写一个扩展函数类型的接口: 然而,现在我不知道如何用这个来实例化lambda函数。当我从中创建
我希望函数位于类中(不污染全局名称空间),但可以静态访问(从不创建它们所在的对象)。提议的解决办法: 这是一个好的解决方案,还是不可避免地会创建一个对象?我应该使用哪种图案?
问题内容: 选项:使用元组 考虑下面这个简单的例子: 但是,随着返回值的数量增加,这很快就会成为问题。如果要返回四个或五个值怎么办?当然,你可以继续修改它们,但是很容易忘记哪个值在哪里。在任何想要接收它们的地方打开它们的包装也是很丑陋的。 选项:使用字典 下一步的逻辑步骤似乎是引入某种“记录符号”。在Python中,一种明显的方法是使用dict。 考虑以下: (请注意,y0,y1和y2只是抽象标识