2016-06-24 4 views
-1

참조로 스칼라에서 객체를 전달하고 싶습니다.스칼라에서 참조로 전달하는 방법은 무엇입니까? ListBuffer를 사용하여

의사 코드는 그래서 대해 forEach의 각 반복에

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 
} 

같은 것입니다,리스트 2는 다른 것 :/ 스칼라에서이 작업을 수행하는 가장 좋은 방법이 될 것입니다 무엇. 감사 : D

+2

"스칼라에서 이것을 수행하는 가장 좋은 방법"은 전혀하지 않는 것입니다. 가변적 인 컨테이너를 사용하는 것은 거의 항상 스칼라를 작성할 때 잘못된 생각입니다. 그러나 당신이 당신의 방식대로 주장한다면, 모든 것이 스칼라에서 참조로 전달되기 때문에 더 많은 코드를 보여 주어야 할 것입니다. 그래서 문제가 다른 것입니다. (나는 추측하고 있습니다. 잘못된 함수를 사용하여 버퍼를 변형하고 있습니다.). BTW,'forEach' 함수는 없으며 당신의 parethes는 언밸런스입니다. – Dima

+0

스칼라는 참조 전달을 지원하지 않습니다. 인수는 값 별 전달이거나 이름 별 호출입니다. 참조를 통과해야하는 경우 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 
} 

뭔가 : 코드는 출력을 생성 할 것인가? Dima가 말한 것처럼 좋은 방법은 아닙니다.

관련 문제