0

My code is :

def ip_list = ['192.168.1.1', '192.168.1.2', '192.168.1.3' ]
def task = [:]
for (ip in ip_list) {
   task[ip] = { println "test on ${ip}" }
}

for (f in task.values())
{
   f()
 }

The out put is :

test on 192.168.1.3
test on 192.168.1.3
test on 192.168.1.3

But which output I expect is :

test on 192.168.1.1
test on 192.168.1.2
test on 192.168.1.3

What should I do ?

Thanks!

Mr.Bingo
  • 71
  • 1
  • 6

1 Answers1

2

#1

def ip_list = ['192.168.1.1', '192.168.1.2', '192.168.1.3' ]
def task = [:]
for (_ip in ip_list) {
   def ip = _ip
   task[ip] = { println "test on ${ip}" }
}

for (f in task.values())
{
   f()
}

#2

def ip_list = ['192.168.1.1', '192.168.1.2', '192.168.1.3' ]
def task = [:]
for (_ip in ip_list) {
   task[_ip] = {ip-> println "test on ${ip}" }.curry(_ip)
}

for (f in task.values()){
   f()
}

#3

def ip_list = ['192.168.1.1', '192.168.1.2', '192.168.1.3' ]
def task = {ip-> println "test on ${ip}" }
def task_map = ip_list.collectEntries{ip-> [ip, task.curry(ip)] }

for (f in task_map.values()){
   f()
}
daggett
  • 26,404
  • 3
  • 40
  • 56