函数的打印结果
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
变量本身,但它并没有达到我的预期。
如果我理解正确,要保持函数 main
的预期结果,您只需插入 x
作为函数的最后一个语句,它有一个隐含的 return
在 Scala 中的含义。
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
return 类型,但您声明 main
具有 [=16] =] return类型。
请注意,当您扩展 App
时,您不必实施 main
方法。 object
的实际主体在应用程序 运行 时执行。请试试这个修改后的版本。
尝试将您的代码更改为如下内容:
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
,链接操作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
如何在 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
变量本身,但它并没有达到我的预期。
如果我理解正确,要保持函数 main
的预期结果,您只需插入 x
作为函数的最后一个语句,它有一个隐含的 return
在 Scala 中的含义。
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
return 类型,但您声明 main
具有 [=16] =] return类型。
请注意,当您扩展 App
时,您不必实施 main
方法。 object
的实际主体在应用程序 运行 时执行。请试试这个修改后的版本。
尝试将您的代码更改为如下内容:
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
,链接操作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