Scala3中的@main注释如何工作?
在学习 Scala 3 时,我看到了一种新的编写方式main:
@main def main1 =
println("main1 printed something")
我检查了来源@main,它只是
class main extends scala.annotation.Annotation {}
使用@main这里发生了什么?
回答
@main真的没有做任何事情。Scala 编译器可以完成所有工作。Scala 编译器将查找任何标记为的方法@main并将它们转换为 java (jvm) 入口static void main方法。
Scala 还支持多个@main . 它将每个@main方法链接到static void不同类中的单个方法。
除了将@main方法连接到 java 入口点之外,Scala 编译器还添加了一些基本的参数解析。例如,你可以这样做:
@main def go(name:String, age:Int) = println(s"hello, $name ($age)")
并期望它在您传递姓名和年龄时通过 CLI 工作。
所以@main真的只是一个标记注释。
参考文档:https : //dotty.epfl.ch/docs/reference/changed-features/main-functions.html