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
}