def和val的区别?

⭐️⭐️⭐️⭐️

  1. val是函数,def是方法,方法通常定义在类/特质/对象里面。

  2. 根据ETA技术,大部分情况下它俩可以等价交换。

  3. 函数是一个对象,该对象是Function0~Function22的实例,并拥有一些通用操作。

  4. 尽管ETA使得两种方式基本等价,但本质上函数是个支持序列化的,方法不是。所以方法名只能作为参数去调用另一个接受函数为参数的方法(ETA),或者使用自己所需的参数来调用自己,但函数的使用与其他类型的值使用起来几无区别。

  5. 调用柯里化方法,并部分应用该函数时(只传部分参数),实际上是将方法转化为了函数(根据柯里化层级,可能是高阶函数),该函数以原方法剩下(排除部分应用的调用时你已经传递的)的参数为参数,返回类型不变。

1.定义柯里化函数

def sss(i:Int)(j:Int) = 10

2.部分应用,只传一个参数。下划线在Scala2是必须的,Scala3中,优化的ETA已经支持省略下划线

sss(1) _

3.得到一个新函数,注意,是函数,不是方法。该函数的参数Int是用于接受j这个刚刚你没有传的参数。

Int => Int

答到1 3及格

答完满分

Last updated

Was this helpful?