在Scala中使用哪种情况'='和'=>'?

时间:2019-01-04 12:44:07

标签: scala

我是scala的新手,我对=和=>有点困惑,我不知道在哪种情况下完全使用 = => 。< / p>

1 个答案:

答案 0 :(得分:1)

@RamanMishra的评论是正确的,但是我想扩大一点,希望对您来说更清楚。

a = b意味着a现在与b 相等(在该词的命令性含义中,更好地理解为作业
它在很多地方都使用过,例如在定义function\method

def sum(a: Int, b: Int): Int = a + b

以上声明可以理解为:
”我们定义了一个名称为sum函数,该函数带有两个Int类型的参数(a和b)并返回一个Int body \ implementation (主体\实现)与“ a + b“相等”。

a => b意味着,有一个函数,它具有参数列表a和主体b,它在两个地方都使用过,包括匿名函数和高阶函数。

val anonymous: Int => Int = x => x + 1

上面的语句可以理解为: “我们定义了一个名为anonymous的值,其类型为 function ,其中一个参数的类型为Int,返回类型为Int,即“等于''匿名函数,该函数采用一个参数x(其类型由上下文推断,在此类型中为显式类型签名),其 body 为{{1 }}“

x + 1

上面的语句可以理解为: “有一个函数def higherOrder(x: Int, f: Int => Int): Int = f(x) ),它将另一个函数作为参数(sum),后面是一个函数类型为fInt


编辑

正如@Aki所建议的,Int也用于模式匹配,以将大小写和代码块分隔开来。

=>

“如上例所示,这有点类似于参数列表 def fact(n: Long): Long = n match { case 0L => 1L case n => n * fact(n - 1) } 功能主体”。

>

PS::这是101个Scala问题,因此并不是此类问题的最佳选择,因为互联网上可能有足够的资源-例如this cheatsheet,或者更好的询问场所-例如scala gitter channel