我试图用kotlin编写函数,但无法将值重新分配给函数参数,它说val无法重新分配。
class WebView{
var homepage = "https://example.com"
fun webViewLoad(url: String, preferredOrientation: String) {
if (url.equals("homepage")){
url = homepage
}
}
}
当我尝试给url = homepage赋值时,它给我报错val无法重新分配,我是kotlin的新手,我不明白这是什么问题,几乎没有帮助。
答案 0 :(得分:2)
函数参数的工作方式类似于val
变量,无法重新分配。在这里,您需要使用条件初始化添加变量:
fun webViewLoad(url: String, preferredOrientation: String) {
val urlValue = if (url.equals("homepage")){
homepage
} else {
url
}
... //use here "urlValue" variable
}
顺便说一句,在kotlin
中,您无需使用equals
函数来比较字符串:通用操作符==
将在字节码中自动替换为equals
答案 1 :(得分:2)
Kotlin参数是不可变的 (Reference)
主要原因是这令人困惑:人们倾向于认为这意味着通过引用传递参数,我们不支持该参数(在运行时代价很高)。另一个混乱的根源是主要的构造函数:构造函数声明中的“ val”或“ var”意味着与函数声明(即,它创建属性)不同。另外,我们都知道,改变参数不是好的样式,因此在函数中在参数的前面写入“ val”或“ var”,不再允许for循环的catch块。
答案 2 :(得分:1)
Kotlin函数参数是最终的。没有val或final关键字,因为这是默认关键字(并且不能更改)。看看this。
答案 3 :(得分:0)
这会给您带来错误"val cannot be reassigned"
,因为Kotlin函数参数为immutable i.e "val" by default.
,因此您无需提及"val" keyword
。
快速解决方案是:
class WebView{
var homepage = "https://example.com"
fun webViewLoad(url: String, preferredOrientation: String) {
val finalUrl = if (url.equals("homepage")) homepage else url
}
}
答案 4 :(得分:0)
该函数中传递的默认参数是最终的,您可以做的就是添加var。希望对您有所帮助。
fun webViewLoad(var url: String, preferredOrientation: String) {
if (url.equals("homepage")){
url = homepage
}
}