Ktor—由Application.module函数中的主函数初始化的访问变量 var foo:String?=无效的 趣味主线(参数:数组):单位{ foo=“你好,世界” io.ktor.server.netty.EngineMain.main(args) } @Suppress(“unused”)//在application.conf中引用 @kotlin.jvm.jvm重载 fun Application.module(测试:Boolean=false){ //foo在这里是空的 }

Ktor—由Application.module函数中的主函数初始化的访问变量 var foo:String?=无效的 趣味主线(参数:数组):单位{ foo=“你好,世界” io.ktor.server.netty.EngineMain.main(args) } @Suppress(“unused”)//在application.conf中引用 @kotlin.jvm.jvm重载 fun Application.module(测试:Boolean=false){ //foo在这里是空的 },kotlin,ktor,Kotlin,Ktor,如何访问应用程序.module中的foo,以及为什么这是一个问题?您可以按以下格式传递任意参数:-p:其中是参数的实际名称。在Application.module中,您可以通过config对象访问它们: var foo : String? = null fun main(args: Array<String>): Unit { foo = "Hello World" io.ktor.server.netty.EngineMain.main(arg

如何访问
应用程序.module
中的
foo
,以及为什么这是一个问题?

您可以按以下格式传递任意参数:
-p:
其中
是参数的实际名称。在
Application.module
中,您可以通过
config
对象访问它们:

var foo : String? = null

fun main(args: Array<String>): Unit {
    foo = "Hello World"
    io.ktor.server.netty.EngineMain.main(args)
}

@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
    // foo is null here
}
fun Application.main(){
println(environment.config.property(“”.getString())
}

您无法访问模块中的此类变量,因为Ktor在不同的类加载器中加载您的应用程序(和ofc模块)


当您调用
EngineMain.main()
时,它会经历一长串调用,其中一个步骤是在
createApplication()
方法中创建一个新的类加载器。
createClassLoader()
的实现是。

谢谢,但是为什么
Application.module
中的
foo
为null呢?所以唯一的方法是用
-p
将命令行参数传递给
应用程序。module
并在那里执行所有初始化操作?@daka可能还有更多的方法,但我知道的唯一方式就是你说的,所以是的,那是真的。顺便说一句,你们可以有多个模块,你们不受限制,只有一个。
fun Application.main() {
    println(environment.config.property("<argument>").getString())
}