Как передать кортеж для аргумента переменной HashMap в Scala? - PullRequest
1 голос
/ 07 марта 2012

Я хочу использовать кортеж, возвращенный из метода, для создания нового элемента хэш-карты, но он выдает ошибку, когда я пишу так

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

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

Как использовать кортеж для обновления хэш-карты?

Eclipse IDE сообщает мне "недостаточно аргументов для обновления метода: (ключ: String, значение: String) Единица. Не указано значение параметра value."и не позволит мне скомпилировать скрипт.

Ответы [ 2 ]

6 голосов
/ 07 марта 2012

Это также работает:

(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"
6 голосов
/ 07 марта 2012

Вместо

// 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)

Использовать

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