関数パラメータのVal cannot be reassignedの原因と対処法
エラーコード例
fun main() {
var test = "test"
aaa(test)
println(test)
}
fun aaa(test: String) {
test = "not test"
}
エラー文言
Val cannot be reassigned
Valで宣言した変数に再代入は不可能です。
解決方法
戻り値にする
関数の引数に対して値を代入するのではなく、関数の戻り値として値を設定しましょう。
fun main() {
var test = "test"
test = aaa(test)
println(test) // 結果: not test
}
fun aaa(test: String): String {
// test = "not test"
return "not $test"
}
関数型のパラメータにする
fun main() {
var test = "test"
aaa({ x -> test = x })
// aaa({ test = it }) <- この書き方でもOK
println(test)
}
fun aaa(operation: (String) -> Unit) {
operation("aaa")
}
aaa()関数のパラメータに関数型のoperationを指定しています。
main()の中でラムダ式を使い、関数型のインスタンス化をすることでラムダ式外の変数へのアクセスも可能になります。
そのため値の変更が可能になります。
原因
Kotlinでは関数のパラメータは自動的にValに設定されており、変更できないルールになっています。