当前位置: 首页 > 知识库问答 >
问题:

在Scala repl中使用'val'和'def'定义函数有什么不同?

翟奇
2023-03-14
scala> val b=(x:Int)=>x+1
b: Int => Int = <function1>

scala> def c(x:Int)=x+1
c: (x: Int)Int
scala> b(1)
res4: Int = 2

scala> c(1)
res5: Int = 2

不重复:

此问题不是链接问题的重复。尽管它询问了使用def和val定义函数之间的区别,但代码示例清楚地表明asker对Scala中方法和函数之间的区别感到困惑。该示例根本没有使用def来定义函数。-7小时前的Aaron Novstrup

共有1个答案

容远
2023-03-14

使用def创建一个方法(在REPL的情况下,它将在某个全局不可见对象中创建一个方法),val将创建一个匿名函数并将其分配给您指定的符号。

当调用这些时,它们几乎是一回事;当您传递它们时,会有不同,但是Scala通过透明地执行ETA扩展来隐藏它。例如,如果定义如下:

def isEven(i: Int): Boolean = i % 2 == 0

然后打电话

list.filter(isEven)
list.filter((i: Int) => isEven(i))
 类似资料:
  • 我在使用scala时做了如下的事情:

  • 我引用马丁·奥德斯基的话: def表单是“按名称”的,每次使用时都会对其右手边进行评估。 val定义的右侧是在定义本身处计算的。 null null 我有点困惑为什么:

  • 我浏览了有效的scala幻灯片,在幻灯片10中提到,不要在抽象成员的中使用,而是使用。幻灯片没有详细提到为什么在中使用抽象是反模式。如果有人能解释在抽象方法的特征中使用val vs def的最佳实践,我将不胜感激

  • 我正在使用webpack来配置源代码映射。我想知道有人能澄清“val”和“evar-source-map”之间的区别吗?我个人看不出有什么区别。

  • 如下是一个自定义Hook: 我发现定义Hook和定义普通的js函数对比,除了use开头的命名规范之外没有任何差异: 1、请问定义Hook和定义普通的js函数还有哪些区别吗? 2、自定义 Hook 可以调用其他的 React Hook,如 useState, useEffect 等。普通函数不能这样做。请问这个是如何实现这个约束的呢(普通函数不能这样使用,是运行时检查use开头的函数吗)? 3、使用

  • 我在nodejs中运行一个python脚本。但是我想保持开放,然后从nodejs调用def函数几次。我怎么能做到这一点。 ################################################################################### 测验派克