我是Kotlin的新手。我在编写一个改变布尔值的函数时遇到了问题。
fun main () {
var x = false
functionWithBoolean(variable = x)
}
fun functionWithBoolean(variable: Boolean) {
if (variable){
println("x is true, so I switch to false")
variable = false //value of x should be changed from true to false
}
else if (variable == false){
println("x is false, so I switch to true")
variable = true //value of x should be changed from false to true
}
}
我遇到的错误:Kotlin:瓦尔不能被重新分配
请解释如何使“变量”变量,虽然x是设置为变量。
3条答案
按热度按时间pkmbmrz71#
在此
x
可以重新分配但是当你把值作为参数传递给
functionWithBoolean
时,你传递的是引用,所以即使你改变了它,它也不会改变源代码。然而,如果你通过这个简单的改变将值作为返回值传递回去,你将实现你想要的:
p4rjhz4m2#
通过将变量x传递到函数中,你是按值传递,而不是按引用传递,你可以想象传递了一个副本。你可能会找到一个解决方案here(同样的问题,发布于2017年3月1日)或here,但通常你不会改变函数的参数值。
source
vlju58qv3#
要改变一个函数中的变量,你必须传递一个实际的变量设置器,而不仅仅是变量的值。所以你必须给予你的函数一个变量设置参数。这只是一个例子,你可以实际实现这一点。在大多数情况下,这将被认为是复杂的设计。
我将“variable”改为“input”是因为将函数参数称为变量是没有意义的。你不能直接传递变量,只能传递值。
这种设计是复杂和容易出错的,所以通常你会简单地从函数返回一个新值,并将其分配给你的变量:
或者更简单地说: