【发布时间】:2021-09-21 22:33:57
【问题描述】:
在学习 Scala 3 时,我看到了一种新的写法main:
@main def main1 =
println("main1 printed something")
我检查了@main 的来源,它只是
class main extends scala.annotation.Annotation {}
在这里使用@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
【讨论】: