gpt4 book ai didi

grails - Groovy 类型转换现奇怪

转载 作者:行者123 更新时间:2023-12-02 15:05:32 25 4
gpt4 key购买 nike

我有这段代码:

class GitDownloader extends DefaultActor {

private String dir

@Override
protected void act() {
loop {
react {
repos -> if (repos instanceof String[])
println "Total Repos: ${repos.size()}"
repos.each {
repo ->
"git clone ssh://git@bar-src.foo.com/${repo} ${dir}/${repo.split("/").last()}".execute()
}
}
}
}
}

我这样开始:
def gitDownloader = new GitDownloader(dir: sourceCodeFolder)
gitDownloader.start()
gitDownloader << repositories

问题是任务以随机顺序执行。
它应该运行 git clone命令的次数与 repos.size() 一样多,但事实并非如此。它每次运行随机次数。

each循环应该作为单个任务在后台执行,似乎 git clone命令是并行执行的。

最佳答案

如果您要发送一个列表,它将是一个接收到的列表......

以下代码:

import groovyx.gpars.actor.*

class GitDownloader extends DefaultActor {

private String dir

@Override
protected void act() {
loop {
react { repos ->
println "Got an ${repos.getClass()} of repos"
repos.each {
repo ->
println "doing $repo for dir $dir"
}
}
}
}
}

def g = new GitDownloader(dir:'woo')
g.start()
g << ['a', 'b']

打印:
Got an class java.util.ArrayList of repos
doing a for dir woo
doing b for dir woo

这似乎按预期工作......

或将其更改为一次做一个(添加 sleep 以模拟正在完成的一些工作)
import groovyx.gpars.actor.*

class GitDownloader extends DefaultActor {

private String dir

@Override
protected void act() {
loop {
react { repo ->
println "Got an ${repo.getClass()} of repos"
println "doing $repo for dir $dir"
Thread.sleep(1000)
}
}
}
}

def g = new GitDownloader(dir:'woo')
g.start()
g << 'a' << 'b'
g

也有效,并打印:
Got an class java.lang.String of repos
doing a for dir woo
Got an class java.lang.String of repos
doing b for dir woo

从您的代码中,我看不到问题(除了 String[] 的东西)

关于grails - Groovy 类型转换现奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com