Kotlin:在函数中传递范围作为参数



Hello,是否可以像在python中一样在Kotlin函数中传递范围?我刚开始学习Kotlin,但是我有点卡住了

我希望我能传递一些像

my_gauge = Gauge('test_name',1..200, 201..300, and etc.)
例如,我有一个Gauge对象,它在 的基础上旋转
class Gauge(val gauge_name: String,
val red_value: Float, 
val orange_value: Float,
val yellow_value: Float,
val green_value: Float,
var current_value: Float,
val min_value: Float,
val max_value: Float) {
val gauge_green = 0xFF66C2A5.toInt()
val gauge_yellow = 0xFFFDD448.toInt()
val gauge_orange = 0xFFF5A947.toInt()
val gauge_red = 0xFFD53E4F.toInt()
val min_rotation: Int = 0;
val max_rotation: Int = 300;
val ratio = max_rotation / max_value;
fun calculate_rotation(): Int {
return (current_value * ratio).toInt()
}
fun get_color(): Int {
if (current_value >= red_value) {
return gauge_red
}
if (current_value > orange_value) {
return gauge_orange
}
if (current_value > yellow_value) {
return gauge_yellow
}
return gauge_green
}

}

我刚刚意识到它不会与这个数据一起工作,相反,它将更好地围绕

范围构建我的逻辑所以我的问题是如何传递范围作为类/函数的参数(而不是浮点数)

PS:函数get_colors不正确,一旦我可以通过when(current_value)语句

传递范围,我将修复它

是,..产生的范围类型为ClosedRange<T>:

fun foo(floatRange: ClosedRange<Float>) {
println(floatRange.random())
}
// Usage:
foo(1f..10f)

对于整数范围,您可能更喜欢IntRange而不是ClosedRange<Int>,因为它允许您使用firstlast而不是startendInclusive来使用它,而不会带来装箱的性能成本。其他数字类型没有开箱版本。

试试这个简单的方法,你可以使用范围根据数据类型IntRange, FloatRange, LongRange等

fun foo(range: IntRange){
for (a in range){
println(a)
}
}

//调用这个函数foo (1 . . 10)

最新更新