2012-03-07 4 views
1

나는 새로운 해시 맵 항목을 만드는 방법에서 반환 된 튜플을 사용하고 싶지만 난 당신이 해시 맵을 업데이트하는 튜플을 어떻게 사용합니까이스칼라에서 HashMap 변수의 인수에 튜플을 전달하는 방법은 무엇입니까?

var data= HashMap[String,String]() 
data.update(choose("name")) 

def choose(a:String):(String,String)= return (a, "Pete") 

처럼 쓸 때 그것은 내게 오류를 준다?

Eclipse IDE에서 "메소드 업데이트를위한 인수가 충분하지 않습니다. (키 : 문자열, 값 : 문자열) 단위, 지정되지 않은 값 매개 변수 값"이라고 알려줍니다. 스크립트를 컴파일하도록하지 않을 것입니다. 대신

// update requires a separate parameters for key and value 
data.update(choose("name")) // won't compile ! 

// the following will work 
val (key,value) = choose("name") 
data.update (key,value) 

+0

왜냐하면'data.update()'는 튜플을 허용하지 않기 때문입니다. –

답변

6

사용

data+=choose("name") // += takes (key,value) tuple as a parameter 
+0

아우, 그게 더 간단한 해결책입니다. 감사합니다 – Elonoa

6

이뿐만 아니라 작동합니다

(data.update _).tupled(choose("name")) 

tupled 인수의 튜플을 필요로하는 기능에 여러 인수를 필요로하는 기능을 변환합니다.

귀하의 경우, 블라드의 방식처럼 깨끗하지는 않지만 일반적으로 인수가 들어있는 튜플을 가지고있는 경우 tupled을 사용할 수 있습니다.

val f = (a: String, b: String, c: String) => a + b + c 
val myargs = ("1", "2", "3") 
println(f.tupled(myargs)) // produces "123" 
+0

그 하나 몰라요 - 멋진 포인터, 고마워요! –

+0

고맙습니다. 그것도 효과가있다. – Elonoa

관련 문제