Boolean = -6ren">
gpt4 book ai didi

scala - 为什么这些看似相同的函数定义会产生不同的结果?

转载 作者:行者123 更新时间:2023-12-02 00:34:09 26 4
gpt4 key购买 nike

A 型:

val even1 = (x:Int)  => { println("in even1"); x % 2 == 0}

REPL 上的输出:

even1: Int => Boolean = <function1>

B 型:

val even2 : Int => Boolean  = { println("in even2");_% 2 == 0}

REPL 上的输出:

in even2
even2: Int => Boolean = <function1>

我知道函数的“def”和“val”声明之间的区别,上面的条件对我来说看起来有点不同。请帮我理解其中的区别...

最佳答案

even1even2确实不等价。要理解原因,这里有一种不同但等效的定义 even2 的方法。 :

val even2 : Int => Boolean = { println("in even2"); x => x % 2 == 0 }

现在... even1 的右侧 (RHS)的定义是一个采用 Int 的函数并返回一个包含 print 语句的 block ,后跟 bool 表达式。

相比之下,在even2中在这种情况下,函数和 block 是“由内而外”的:右侧是一个包含 print 语句和 Int => Boolean 类型的函数的 block 。 .

在 Scala 中, block 是一个表达式,该表达式的结果是该 block 包含的最后一个表达式(如果有;() 否则)的结果。因此,println even1中的声明每次 even1 都会执行被调用,而println even2中的声明仅在 even2 时执行一次已定义。

关于scala - 为什么这些看似相同的函数定义会产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39719158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com