Generics 摘录片段-99个问题问题18(科特林)

Generics 摘录片段-99个问题问题18(科特林),generics,kotlin,Generics,Kotlin,我需要从列表中提取一个片段: assertThat(slice(3, 7, "abcdefghijk".toList()), equalTo("defg".toList())) 我有: @Suppress("unused") fun <T> slice_(from: Int, to: Int, list: List<T>) = list.subList(from, to) 但我得到了未解析的长度引用。显然,我在函数中引入大小是做错了什么。我怎样才能避开它 我对Kotl

我需要从列表中提取一个片段:

assertThat(slice(3, 7, "abcdefghijk".toList()), equalTo("defg".toList()))
我有:

@Suppress("unused")
fun <T> slice_(from: Int, to: Int, list: List<T>) = list.subList(from, to)
但我得到了未解析的长度引用。显然,我在函数中引入大小是做错了什么。我怎样才能避开它


我对Kotlin非常了解,因此请避免发表表明我缺乏这方面知识的评论

这是因为您使用的是泛型,
可以是任何对象,没有
大小
长度
。也许你想把
T
限制为某个具有大小/长度的东西的子类

编辑: 或者,如果您试图访问列表的大小,只需使用
list.size

无论哪种方式,您可能只想检查,如果当前foreach索引在限制范围内,您可以使用:

fun slice(from:Int,to:Int,list:list):list=list.filterIndexed{index,it->
索引从到
}

具有该范围的解决方案有效,并且与使用泛型相比,它的代码要少得多。但是,由于没有使用它,我将其替换为33;。我仍然需要时间来熟悉科特林的射程有多容易。谢谢,不用担心!我喜欢你在你的问题中加入测试用例,这让事情变得更快更容易理解。谢谢:)当我处理纯粹的问题解决问题时,我会尝试先让自己专注于测试,因为你可以从测试中提取很多逻辑,然后构建代码。
fun <T> slice(from: Int, to: Int, list: List<T>): List<T> = list.filterIndexed { index, it ->
    (index == from) && (it.size == to-from)
}
private val Any?.size: Any
get()= this.length
fun <T> slice(from: Int, to: Int, list: List<T>): List<T> = list.filterIndexed { index, it ->
    index in from until to
}