scala - 函数调用时不返回值

标签 scala

所以,我对 Scala 有点陌生,与其他语言相比,我不太了解它如何读取代码。

举这个简单的例子:

@main
  def roll():Int =
    var x:Int = (math.random*6+1).toInt
    return x
  def print = 
    for i <- 1 to 10 do 
      println(roll())

上面的代码没有返回任何内容,但是,如果我翻转方法(将 print“method”放在“roll”之前),它现在就可以工作了。我觉得这非常奇怪。我哪里做错了?我只是想调用一个随机化数字的方法/函数,并使用新函数来调用它来打印它。谁能帮帮我?

最佳答案

@main annotation应用于方法(一,其后为以下内容),即 for :

@main
def roll():Int =
  var x:Int = (math.random*6+1).toInt
  return x

def print = 
  for i <- 1 to 10 do 
    println(roll())

您的 main 方法将是 roll 并且只有它会在程序执行期间被调用。 print 只是一个声明的方法,没有被调用。

当你“翻转它们”时:

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

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

print 成为 main 方法,因此它被调用,并在循环中调用声明的 roll 方法。

另请阅读annotations doc .

关于scala - 函数调用时不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73563144/

相关文章:

scala - 在 Spark Dataframe 中的列列表中添加行和列

scala - 如何使用 withColumn Spark Dataframe scala with while

scala - project/Dependencies.scala 无法从 plugins.sbt 访问

scala - 将可变映射转换为不可变映射

scala - scala.actors包不见了吗?

java - Android(在 Scala 中): StackOverflowError depends on when to start a thread?

Scala Slick 3.1 多重连接

java - Docker:Play 框架应用程序退出,代码为 0

scala - 使用 Scala 应用程序将 List[Object] 转换为案例类

scala - 如何使用 Scala Breeze 对向量执行逐元素标量运算?