2016-06-24 8 views
-1

Scalaでオブジェクトを参照渡ししたいと思います。Scalaでの参照渡しはどうすればよいですか? ListBufferを使って

擬似コードはそれほどのforEachの各反復で、リスト2は異なるだろう

var list1 = List(//stuff in here) 
var list2 = List(//stuff in here).toBuffer 

list1.forEach(element => foo(element,list2) 


def foo(element,list2){ 
    remove something from list 2 
} 

のようなものです:/ Scalaの上でこれを行うための最善の方法は何だろう。ありがとう:D

+2

「スカラーでこれを行う最善の方法」は、まったくそれをしないことです。変更可能なコンテナを使用することは、ほとんどの場合、スカラを書くときの間違った考えです。 しかし、あなたが自分のやり方を主張すれば、すべてがスカラで参照渡しされるので、コードをもっと表示する必要があります。あなたの問題は何か他にあります(私はあなたのバッファを変更するために間違った関数)。ところで、 'forEach'関数はありません。あなたのパレットはアンバランスです。 – Dima

+0

Scalaは参照渡しをサポートしていません。引数は、値渡しまたは名前による呼び出しです。参照渡しが必要な場合は、両方をサポートするC++またはC♯を試すことができます。 –

答えて

0

List()。toBufferは、それ自体が変更可能なArrayBufferを生成します。 varを使う必要はありません。 重要なことは、「リスト2から何かを削除する」コード部分が何であるかです。ここでは問題なく、これを行うためのサンプルコードです。

foo
val a = List(1,2) 
val b = List(1,3,2).toBuffer 
a.foreach(ele => foo(ele, b)) 
println(b) 

def foo(ele: Int, b: mutable.Buffer[Int]): Unit = { 
    b -= ele 
} 

、BufferLikeを使用.- =方法これはあなたが望むものであるならば、それは大丈夫だと思う、それのバッファ内で削除します。このような

ArrayBuffer(3) 
0
def main(args: Array[String]): Unit = { 

    var list1 = List(1, 2, 3) 
    var list2 = List(1, 2, 3, 4).toBuffer 
    list1.foreach(
    element => 
     list2 = foo(element, list2) 
) 
} 



def foo(element: Int, list2: Buffer[Int]) = { 
     println("list2 length:" + list2.length) 
     list2.foreach(println) 
     var newlist = list2.drop(element) 
     newlist 
} 

何か:コードは出力を生成しますか?ディマが言ったようにそれは良い方法ではありません。

関連する問題