gpt4 book ai didi

android - 我是否让 Kotlin 函数正确返回一个列表?

转载 作者:行者123 更新时间:2023-12-05 00:06:03 25 4
gpt4 key购买 nike

我是 Kotlin 的新手(来自 Delphi,它是面向对象的 Pascal)。我只是想确保我有函数返回 List<>正确:

在这里编一个荒谬的简单例子:

    fun firstTenInts(): List<Int> {
val iList: MutableList<Int> = mutableListOf()
for (i in 1..10)
iList.add(i)
return iList
}

所以,我的想法/问题是:

  • 我使用 MutableList 是否正确?在函数中并简单地返回它(即使函数的类型是 List )?

  • 需要创建本地 MutableList多变的?我需要任何本地“列表”变量吗?我习惯于(同样是 Delphi)做类似的事情:

    function firstTenInts: TStringList;
var
i: integer;
begin
result.Clear;
for i := 1 to 10 do
result.Add(IntToStr(i));
end;

不需要“新的”局部变量。我只是“工作”result这与 Kotlin 的 return 非常相似值,除了它作为函数类型的局部变量,可以在整个函数中“工作”。

  • 没有办法操纵 Kotlin 函数的 return 吗?与另一个(本地创建的)变量不同的值?

  • 最后,我可以放心,我创建的任何局部变量都会在函数结束时被销毁,即使我正在“将它们传回”——对吗?

附言我知道这是创建 List 的荒谬方法10 个整数。我仅将其用作上面详述的问题/问题的框架。假设返回的 List大小未知。

(请不要建议创建此整数列表的更好方法;这不是我要问的)。

最佳答案

  • Am I correct to use a MutableList within the function and simply return it (even though the function's type is List)?

一般来说没问题。如果您需要一个可以在函数内改变的列表,但从外部您不希望它容易改变(这并不意味着它不可变;您仍然可以将它转换为可变列表),则可以执行此类操作,即 firstTenInts() as MutableList 会起作用,所以你也可以再次改变它)。您是否需要函数中的可变列表实际上取决于您。例如只调用 listOf(1, 2, 3)会给你一个List<Int>立即,即 fun first3Ints() = listOf(1,2,3)将立即返回 List<Int> .

  • Do I need to create a local MutableList variable? Do I need any local "list" variable? I am used to (again, Delphi) doing something like:

你不需要,但你可以。什么更适合您的需求取决于您。这也适用于您的本地列表变量。你不一定需要一个,即使你在引擎盖下仍然有一个。示例:

fun first3Ints() = listOf(1, 2, 3)

翻译成如下内容:

fun first3Ints() : List<Int> {
val result = listOf(1, 2, 3)
return result
}

在较小的函数上,您至少可以使用直接赋值来省去一些变量声明。你也可以使用类似 apply 的东西, also , let , runwith克服val/var ,例如(只是模拟......所有变体都可以更容易地实现):

fun first3Ints() = arrayListOf().apply {
add(1) // apply allows calling all methods of the receiver directly.. (receiver = arrayListOf...)
add(2)
add(3)
}
fun first2Ints() = arrayListOf().also { // similar to apply, but now there is an 'it' available... you could also name that variable differently, e.g. using .also { result -> result.add(1) }
it.add(1)
it.add(2)
}
  • Is there no way to manipulate a Kotlin function's return value other than with another (locally created) variable?

所以这就变成了(即使..从技术上讲会有一个)......这是可能的,但你需要指定你基本上想要操作的东西,除了你实现扩展功能的情况。然后 this在扩展函数中实际上成为您调用该函数的对象。

  • Finally, I can rest assured that any local variables I create are destroyed when the function ends even though I'm "passing them back" - correct?

... 是也不是。是的,您可以放心,任何局部变量都会在需要时被垃圾回收(除非您正在做一些非常特殊的事情)。还有一个不:你不知道它们什么时候会被摧毁。关于你的返回值,它更特别:你实际上只得到一个对象的引用,而不是对象本身......所以你基本上以某种方式取回了那个局部变量。您可能想看看 JVM/堆栈和堆以及如何引用和存储对象...

关于android - 我是否让 Kotlin 函数正确返回一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com