Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 打印函数的结果_Scala_Printing_Intellij Idea - Fatal编程技术网

Scala 打印函数的结果

Scala 打印函数的结果,scala,printing,intellij-idea,Scala,Printing,Intellij Idea,如何在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.

如何在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)
的结果归因于一个变量,然后
打印该变量本身,但它没有达到我的预期

如果我理解正确,要维护函数
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 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
方法,这可能是您在当前示例中看不到任何打印内容的真正原因。

Scala 2.13
开始,链接操作可以这样使用:

import scala.util.chaining._

def f(): Int = calculate().tap(println)
要避免这种构造,请执行以下操作:

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

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

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


为什么不把你要打印的代码显示出来it@m-z:我只想
println
it,考虑到这只是我想要运行的一种调试步骤,以确保函数返回正确的结果@cmbaxter:我已经编辑了代码以包含打印声明。谢谢@Andre的回答。我已更改
main
以返回
单元
。不幸的是,这没有在控制台上打印
x
@Gianluca的值,现在我知道你在做什么了。请考虑一下这个新版本的答案。扩展
App
时,不必实现
main
方法。我希望这有帮助。