You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中@main函数调用无返回值,调换方法顺序恢复正常的问题求助

问题分析与解决

你的问题核心是对Scala中@main注解的作用理解有误:

  • @main注解的作用是标记程序的入口方法,它只会作用在紧跟在它下方的那个方法上。
  • 你最初的代码里,@main放在了roll方法上方,所以程序启动后只会执行roll方法(生成一个随机数但不会输出),根本不会调用print方法,自然看不到任何输出。
  • 当你把print方法移到roll前面时,@main就绑定到了print方法上,程序启动后执行print,循环调用roll打印随机数,所以能正常输出。

正确的写法示例

方式1:把@main标记到打印方法上

def roll(): Int =
  (math.random * 6 + 1).toInt

@main
def printRolls(): Unit =
  for i <- 1 to 10 do 
    println(roll())

注:Scala中方法最后一行表达式的值就是返回值,不需要显式写return,也没必要额外定义变量x,可以直接简化代码。另外建议避免用print作为方法名,会和Scala标准库的print方法冲突。

方式2:用独立入口方法调用逻辑

def roll(): Int =
  (math.random * 6 + 1).toInt

def printRolls(): Unit =
  for i <- 1 to 10 do 
    println(roll())

@main
def main(): Unit =
  printRolls()

这种写法把程序入口和业务逻辑分开,结构更清晰,也更符合常规的代码组织习惯。

内容的提问来源于stack exchange,提问作者Freeze Aim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:06:27