繁体   English   中英

打印功能的结果

[英]Print result of a function

如何在Scala中更改此功能,以便在IntelliJ IDEA上运行时能够查看结果?

object poisson_sample_size extends App {

  def main(theta1: Double, theta2: Double): Double = {

    val theta1 = 0.0025
    val theta2 = 0.0030

    val num = 4
    val den = ((theta1 + theta2) / 2) - math.sqrt(theta1 * theta2)

    val x = num / den
    println(x: Double)
  }
}

我想检查结果是我期待的结果。 考虑到我刚开始学习Scala,我不确定这是错误的证据。

我试图将(num / den)的结果归因于一个变量,然后print变量本身,但它没有做我所期望的。

尝试将代码更改为以下内容:

object poisson_sample_size extends App {
  val t1 = 0.0025
  val t2 = 0.0030

  val result = calculate(t1, t2)
  println(result)

  def calculate(theta1: Double, theta2: Double): Double = {         
    val num = 4
    val den = ((theta1 + theta2) / 2) - math.sqrt(theta1 * theta2)

    num / den       
  }
}

通过使您的对象扩展App ,您可以免费获得main方法。 然后,使用main对于自定义计算方法不是一个好主意,因为它会与真正的main方法产生混淆,所以我将其更改为calculate 然后,您需要确保调用calculate方法,这可能是您在当前示例中看不到任何内容打印的真正原因。

如果我理解正确,为了维护函数main的预期结果,你只需要插入x作为函数中的最后一个语句,它在Scala中具有隐式return含义。

object poisson_sample_size extends App {

  def main(theta1: Double, theta2: Double): Double = {
    val num = 4
    val den = ((theta1 + theta2) / 2) - math.sqrt(theta1 * theta2)

    val x = num / den
    println(x: Double)
    x // same as: return x
  }

  val theta1 = 0.0025
  val theta2 = 0.0030
  main(theta1, theta2)
}

就像现在这样,你应该得到一个编译错误信息,因为println有一个Unit返回类型,但是你声明main有一个Double返回类型。

请注意,在扩展App您不必实现main方法。 运行应用程序时会执行object的实际正文。 请试试这个修改过的版本。

启动Scala 2.13 ,链接操作tap可以这样使用:

import scala.util.chaining._

def f(): Int = calculate().tap(println)

避免这样的结构:

def f(): Int = {
  val x: Int = calculate()
  println(x)
  x
}

tap链操作在返回原始值时对值应用副作用(在本例中为println ):

def tap [U](f:(A)=> U):A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM