Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何在TeamCity';中引用全局表达式;是科特林DSL吗?_Kotlin_Teamcity_Dsl - Fatal编程技术网

Kotlin 如何在TeamCity';中引用全局表达式;是科特林DSL吗?

Kotlin 如何在TeamCity';中引用全局表达式;是科特林DSL吗?,kotlin,teamcity,dsl,Kotlin,Teamcity,Dsl,我试图在我的设置.kts(以下)中的一个全局位置使用名为myList的字符串(选项)列表,因为我试图使其更易于维护,但我不断遇到此错误表达式无法从嵌套类“MySubProject”访问。我一直在读关于Kotlin的书以及如何使用它,但我还没有弄明白这一点。也许有一些Kotlin或TeamCity DSL经验的人可以帮助我 import jetbrains.buildServer.configs.kotlin.v2019_2.project import jetbrains.buildServer

我试图在我的
设置.kts
(以下)中的一个全局位置使用名为
myList
的字符串(选项)列表,因为我试图使其更易于维护,但我不断遇到此错误
表达式无法从嵌套类“MySubProject”访问
。我一直在读关于Kotlin的书以及如何使用它,但我还没有弄明白这一点。也许有一些Kotlin或TeamCity DSL经验的人可以帮助我

import jetbrains.buildServer.configs.kotlin.v2019_2.project
import jetbrains.buildServer.configs.kotlin.v2019_2.Project

var myList = listOf("Option 1", "Option 2")

project {

        params {
            select("system.MyOption",
                    myList[0],
                    label = "My Option",
                    description = "It's an option.",
                    options = myList)
    }

    subProject(MySubProject)
}

object MySubProject : Project ({
    params {
        select("system.MySubOption",
                myList[0],
                label = "My Sub Option",
                description = "It's another option.",
                options = myList)
    }
})


所以我最后做的就是这样做一个对象声明:

object MyGlobalConfig {
    var myList = listOf("Option 1", "Option 2")
}
project {

        params {
            select("system.MyOption",
                    MyGlobalConfig.myList[0],
                    label = "My Option",
                    description = "It's an option.",
                    options = MyGlobalConfig.myList)
    }

    subProject(MySubProject)
}

object MySubProject : Project ({
    params {
        select("system.MySubOption",
                MyGlobalConfig.myList[0],
                label = "My Sub Option",
                description = "It's another option.",
                options = MyGlobalConfig.myList)
    }
})
然后在脚本的其他部分引用值,如下所示:

object MyGlobalConfig {
    var myList = listOf("Option 1", "Option 2")
}
project {

        params {
            select("system.MyOption",
                    MyGlobalConfig.myList[0],
                    label = "My Option",
                    description = "It's an option.",
                    options = MyGlobalConfig.myList)
    }

    subProject(MySubProject)
}

object MySubProject : Project ({
    params {
        select("system.MySubOption",
                MyGlobalConfig.myList[0],
                label = "My Sub Option",
                description = "It's another option.",
                options = MyGlobalConfig.myList)
    }
})
这是我能想到的最好的办法