如何用范围填充varargs?

时间:2018-05-22 16:36:35

标签: kotlin

填充varargs的正确方法是什么?我的尝试看起来像是一个贱民 在拳头我构建范围
然后我把它转换成列表
然后到intarray
然后传播它

<%= simple_form_for :pack, url: pack_path(@pack), method: :patch do |f| %>

其中getColums是一个接受colums索引为varargs

的方法

2 个答案:

答案 0 :(得分:1)

是的,在这个意义上,范围与数组相距甚远,因此很难将它们作为vararg参数传递。

您可以创建一个函数,将它们更快地转换为IntArray个实例:

fun IntRange.toIntArray() = this.toList().toIntArray()

m.getColumns(*(count..count + 35).toIntArray())

此转换的稍微优化版本:

fun IntRange.toIntArray(): IntArray {
    val size = this.last - this.first + 1
    var current = this.first
    return IntArray(size) { current++ }
}

或者您可以定义一个需要IntRange的重载函数,并进行转换以调用原始函数:

fun getColumns(range: IntRange) = getColumns(*range.toList().toIntArray())

同样,这也可以利用上面的转换方法来获得更好的性能:

fun getColumns(range: IntRange) = getColumns(*range.toIntArray())

答案 1 :(得分:1)

使用多个逗号分隔变量或数组调用varargs方法。

不幸的是,从一个范围制作数组没有捷径。

但是,您可以直接创建一个数组:

${class}==a