2017-11-19 11 views
-1

valに格納されている値をscalaで更新しようとしています。私はこのように直接行うことはできないことを知っています:val x = 2; x = 1。これは私がやっていることではありません、私があなたがヴァルに再割り当てできないことを知っているからです。これは私が何をしようとしていますものです:再割り当てによってスカラのvalを更新する

val fp = List((1,2)); 
    val fp = fp ::: List((1,3)); //hoping that x is List((1,2),(1,3)) 

をしかし、私は言っメッセージが表示されます。

error: recursive value fp needs type 

はまた、私は不変のデータ構造とヴァルスのみを使用するように制限していますので、注意してください。

ガイダンスはありません

+0

ではなくVARを使用しますか? – BlackBear

+0

私が言ったように、私は不変のデータ構造に限られています。 Varは変更可能です。 – User59

+0

私はvalと不変のデータ構造に限定されています – User59

答えて

3

あなたはScalaでvalを再割り当てできません。可能な場合は通常、あなたが、VARSを利用するのは避けるべき

val fp = List((1,2)) 
val fp2 = fp ::: List((1,3)) 

:あなたはVARを使用する必要があり、次のいずれか

var fp = List((1,2)) 
fp = fp ::: List((1,3)) 

するか、2ヴァルスを使用しています。これは、あなたのプログラムをきれいにし、この方法は確実により機能的です。だから、私は2つの値で2番目のオプションを好むだろう。

ところで、セミコロンを使用する必要はありません。実際には、Scalaでのその使用法は推奨されません。

0

Scalaでは、ではありません。コード全体で望ましくない副作用が発生し、推論するのが難しくなります。

変数とその突然変異を捨てて、式のバインディングを考慮する必要があります。 VarはScalaでは悪い書式とみなされます。再割り当てと同じです。

val x = 2; val y = 1 

をあなたはx「を変異させる」ために必要な場合は、次のような何かを行うことができ、以下は望ましくない副作用var sおよび突然変異のいずれかを作成しなくては、欲しいものを正確に行います

val x = 2 
val y = x + 2 // x = 2, y = 4 

ですから、fp番目から欲しかったもの、それは次のようになります。

val fp = List((1,2)); 
val fp1 = fp ::: List((1,3)); 
関連する問題