Scala 打印函数的结果
如何在Scala中更改此函数,以便在IntelliJ IDEA上运行时能够看到结果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.
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
方法。我希望这有帮助。