page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6229 次

3096 个回答

0 赞同

Option类型的定义和使用场景?

在Java中,null是一个关键字,不是一个对象,当开发者希望返回一个空对象时,却返回了一个关键字,为了解决这个问题,Scala建议开发者返回值是空值时,使用Option类型,在Scala中null是Null的唯一对象,会引起异常,Option则可以避免。Option有两个子类型,Some和None(空值) 代码示例: val person: Person = getPerson...

回答于 2021-09-07 15:09

0 赞同

yield如何工作?

yield用于循环迭代中生成新值,yield是comprehensions的一部分,是多个操作(foreach, map, flatMap, filter or withFilter)的composition语法糖。(深入了解请参考问题Q14) 代码示例: // <-表示循环遍历 scala> for (i <- 1 to 5) yield i * 2  res0: scala.collection.immutable.IndexedSeq[Int] = Vecto...

回答于 2021-09-07 15:09

0 赞同

解释隐示参数的优先权?

在Scala中implicit的功能很强大。当编译器寻找implicits时,如果不注意隐式参数的优先权,可能会引起意外的错误。因此编译器会按顺序查找隐式关键字。顺序如下: (1)当前类声明的implicits ; (2)导入包中的 implicits; (3)外部域(声明在外部域的implicts); (4)inheritance (5)package object (6)imp...

回答于 2021-09-07 15:09

0 赞同

comprehension(推导式)的语法糖是什么操作?

comprehension(推导式)是若干个操作组成的替代语法。如果不用yield关键字,comprehension(推导式)可以被forech操作替代,或者被map/flatMap,filter代替。 示例代码: // 三层循环嵌套 for {   x <- c1   y <- c2   z <- c3 if z > 0 } yield {...} //上面的可转换为 c1.flatMap(x => c2.flatM...

回答于 2021-09-07 15:08

0 赞同

什么是vaule class?

开发时经常遇到这个的问题,当你使用integer时,希望它代表一些东西,而不是全部东西,例如,一个integer代表年龄,另一个代表高度。由于上述原因,我们考虑包裹原始类型生成一个新的有意义的类型(如年龄类型和高度类型)。 Value classes 允许开发者安全的增加一个新类型,避免运行时对象分配。有一些 必须进行分配的情...

回答于 2021-09-07 15:08

0 赞同

Option ,Try 和 Either 三者的区别?

这三种monads允许我们显示函数没有按预期执行的计算结果。 Option表示可选值,它的返回类型是Some(代表返回有效数据)或None(代表返回空值)。 Try类似于Java中的try/catch,如果计算成功,返回Success的实例,如果抛出异常,返回Failure。 Either可以提供一些计算失败的信息,Either有两种可能返回类型:预期/正确/成...

回答于 2021-09-07 15:07

0 赞同

什么是函数柯里化?

柯里化技术是一个接受多个参数的函数转化为接受其中几个参数的函数。经常被用来处理高阶函数。 代码示例: def add(a: Int)(b: Int) = a + b val add2 = add(2)(_)  //_ 表示不只一个的意思 scala> add2(3) res0: Int = 5

回答于 2021-09-07 15:07

0 赞同

什么是尾递归?

正常递归,每一次递归步骤,需要保存信息到堆栈里面,当递归步骤很多时,导致堆栈溢出。        尾递归就是为了解决上述问题,在尾递归中所有的计算都是在递归之前调用,      编译器可以利用这个属性避免堆栈错误,尾递归的调用可以使信息不插入堆栈,从而优化尾递归。 使用 @tailrec 标签可使编译器强制使用尾递归。...

回答于 2021-09-07 15:07

0 赞同

什么是高阶函数?

高阶函数指能接受或者返回其他函数的函数,scala中的filter map flatMap函数都能接受其他函数作为参数。

回答于 2021-09-07 15:06

0 赞同

var,val和def三个关键字之间的区别?

var是变量声明关键字,类似于Java中的变量,变量值可以更改,但是变量类型不能更改。 val常量声明关键字。 def 关键字用于创建方法(注意方法和函数的区别) 还有一个lazy val(惰性val)声明,意思是当需要计算时才使用,避免重复计算 代码示例: var x = 3 //  x是Int类型 x = 4      //  x = "error" // 类型变...

回答于 2021-09-06 14:25