我看不到任何在Kotlin中如何使用元组的示例。 我在第一行(方法定义)上遇到的错误是Int ...的“未解决的引用:a”和“期望成员声明”。
private fun playingAround : Pair<out a: Int, out b: Int> {
if(b != 0) {
b = a
a = a * 2
} else {
b = a
a = a * 3
}
return Pair(a, b)
}
关于逻辑:b开头为0,a为随机值。 从第二次调用开始,我们进入else逻辑。
我觉得官方文档不够用:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-pair/index.html。我确实也尝试了不带“:”的方法名称,例如官方文档 -同样的问题
答案 0 :(得分:1)
您可以按以下方式重写代码:
private fun playingAround(a: Int, b: Int) : Pair<Int, Int> {
val tempA: Int
val tempB: Int
if(b != 0) {
tempB = a
tempA = a * 2
} else {
tempB = a
tempA = a * 3
}
return Pair(tempA, tempB)
}
使用Destructuring Declarations,您可以编写以下内容:
val (a, b) = playingAround(1, 2)
答案 1 :(得分:1)
您使用的语法不正确。应该是这样的:
private fun playingAround(a: Int, b: Int): Pair<Int, Int> {
val x: Int
val y: Int
if (b != 0) {
y = a
x = a * 2
} else {
y = a
x = a * 3
}
return Pair(x, y)
}
请注意,a
和b
是无法重新分配的方法参数值,因此您需要变量x
和y
来存储结果。
不过,您可以使用更短的语法编写此代码:
private fun playingAround(a: Int, b: Int) = if (b != 0) Pair(a * 2, a) else Pair(a * 3, a)
答案 2 :(得分:1)
您的函数语法不正确。我建议先研究文档。
要使它更具Kotlin惯用性,请使用if
作为表达式:
private fun playingAround(a: Int, b: Int): Pair<Int, Int> =
if (b != 0) {
Pair(a * 2, a)
} else {
Pair(a * 3, a)
}
答案 3 :(得分:0)
请查看kotlin参考文献的functions chapter和/或尝试使用Kotlin koans来熟悉Kotlin(或者,无论如何,阅读语法是您的最爱,看看function declaration grammar;如果您没有那里写的内容,那没问题。请从教程/参考开始。
其中一种解决方案可能如下所示:
private fun playingAround(a: Int, b: Int) = b.let {
if (it != 0) a * 2
else a * 3
} to a
或者,如果您确实要通过一对,那么以下方法可能会更好:
private fun playingAround(givenPair: Pair<Int, Int>) = givenPair.let { (a, b) ->
b.let {
if (it != 0) a * 2
else a * 3
} to a
}
很难真正知道您想完成什么,因为您没有真正指定要完成的事情。
扩展功能代替了吗?为了完整性:
private fun Pair<Int, Int>.playingAround() = let { (a, b) ->
b.let {
if (it != 0) a * 2
else a * 3
} to a
}
当然:您不需要使用let
,也不需要使用to
,也不需要使用解构声明等。