当前位置: 首页 > 知识库问答 >
问题:

无法将值重新分配给函数参数,虽然其未声明为val,但无法重新分配val

路伟
2023-03-14

我试图在kotlin中编写一个函数,但我无法将值重新分配给函数参数,它说val不能重新分配。

class WebView{

    var homepage = "https://example.com"

    fun webViewLoad(url: String, preferredOrientation: String) {

            if (url.equals("homepage")){
                url = homepage
            }
        }
    }

当我试图分配一个值url=主页. it给我错误val不能重新分配,我是新的kotlin,我不明白是什么问题,很少帮助将不胜感激。

共有3个答案

惠洛华
2023-03-14

由于Kotlin函数参数在默认情况下是不可变的,即“val”,因此会出现错误“val无法重新分配”您无需为其提及“val”关键字。

快速解决方案是:

class WebView{

    var homepage = "https://example.com"

    fun webViewLoad(url: String, preferredOrientation: String) {
            val finalUrl = if (url.equals("homepage")) homepage else url
        }
    }
祁凯泽
2023-03-14

自Kotlin M5.1(参考)以来,Kotlin参数是不可变的

主要原因是这很令人困惑:人们倾向于认为这意味着通过引用传递参数,而我们不支持(在运行时成本很高)。另一个混淆的来源是主构造函数:构造函数声明中的“val”或“var”表示与函数声明(即它创建一个属性)时相同的东西不同。此外,我们都知道变异参数不是好的风格,所以在函数中的参数前面写“val”或“var”,不再允许捕获for-cle的块。

乐正宜人
2023-03-14

函数参数的工作方式类似于无法重新分配的变量。此处需要添加带条件初始化的变量:

fun webViewLoad(url: String, preferredOrientation: String) {
    val urlValue = if (url.equals("homepage")){
        homepage
    } else {
        url
    }
    ... //use here "urlValue" variable
}

顺便说一句,在kotlin中,您不需要使用equals函数来比较字符串:普通运算符==将自动替换为equals在字节码中。

 类似资料:
  • 我为数据类创建了一个var扩展属性,如下所示: 但是,当我尝试将“Val”重新分配给此行中的新值时,编译器会抱怨“Val无法重新分配”: 我真的不明白为什么会这样??我有一个“var”位图属性而不是“val”,那么问题是什么?更重要的是,什么是解决方案或替代方案?

  • 我有这两个函数,我试图修改元素。其中一个编译,另一个说“val不能重新分配”。以下函数有什么区别?为什么一个编译,另一个不编译? 编译的那个 那个说 无法重新分配Val

  • 问题内容: 我有一个名为parseDate的函数,但是当我在我的php页面(它是一个joomla组件页面)上调用它时,出现致命错误:无法重新声明parsedate()(先前在template / ja_zeolite / assets / functions.php:2中声明)第21行的templates / ja_zeolite / assets / functions.php 第2行是函数pa

  • 致命错误:无法在第9行的E:\wamp1\wamp\www\sample.php中重新声明关闭()(先前在E:\wamp1\wamp\www\sample.php: 1中声明) 当我运行这个脚本时,它说不能在第9行中重新声明近()(以前在第1行中被标记)。 即使出现错误,与和相关的值也会传递给css。我在这里做错了什么?我正在调用第9行中的函数。有什么帮助吗?

  • 我在IntelliJ中使用静态编程语言。 我有一段简短的代码 为什么在这个世界上它告诉我: 关于提到的变量,“Val不能重新分配”任何val实例都已完全更改为var。 为了确保这一点,我已经在其他类中更改了同名的变量,甚至还将类中的每个变量都更改为var,我仍然会遇到这个错误。 这与可拉伸的性质有关吗? 我错过了什么或做错了什么来得到这个错误,我如何修复它? 非常感谢。