
scala
蚁方阵
千里之行,始于足下,用代码编织技术人生
展开
-
scala单元测试“NoSuchMethodError”的解决办法
在scala 2.12.3版本的单元测试中,严格按照ScalaTest的安装步骤,结果在运行单元测试时,提示如下错误:java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps; at org.scalatest.tools.Args原创 2017-09-26 21:53:14 · 5256 阅读 · 0 评论 -
Scala容器与Java容器的互相转换
从scala 2.12版本开始,Scala官方废除了“scala.collection.JavaConversions”,改用“scala.collection.JavaConverters”。如果继续强行使用,则会提示如下错误:java.lang.NoSuchMethodError:scala.collection.JavaConversions$.deprecated$u0020prop...原创 2019-04-22 10:35:31 · 2141 阅读 · 0 评论 -
Scala中JSON的读入与写出
在JAVA中,习惯了JacksonObjectMapper的方便与简洁,那Scala中是否有同样类似的ObjectMapper呢?答案是真有,并且是专有,名称是jackson-module-scala。1. 添加依赖理所当然的SBT。name := "scala-datas"version := "0.1"scalaVersion := "2.12.8"libraryDepend...原创 2019-04-22 10:33:48 · 2766 阅读 · 0 评论 -
一种快速切割字符串的方法
在项目中,经常需要对字符串进行切割转换,以日期字符串“2018121810”为例,惯性的思维是利用DateFormat函数,如下:val srcDf:Sdf = new Sdf("yyyyMMddHH")val time: Date = srcDf.parse("2018080810")val toDf: Sdf = new Sdf("yyyy/MM/dd/HH")val outpu..原创 2018-09-06 17:59:51 · 2728 阅读 · 0 评论 -
Scala守卫语句的两种用法
相比于JAVA,Scala的if增加了两项强大的功能,一是可以直接作为赋值语句,另一种功能是作为守卫语句,不仅远远超过JAVA,甚至也将PYTHON抛在身后。1. if作为赋值语句作为赋值语句,不仅仅只是替代了三元运算符,而且还能支持逻辑语句块,如下:val (a, b) = (10, 20)// 更添加更多逻辑控制,且支持语句块val value = if(a >...原创 2018-09-03 22:37:17 · 3185 阅读 · 0 评论 -
Scala隐式类型约束的应用与总结
在《从JAVA到Scala(三):implicit的三种用法》中,详细地说明了“implicit”关键字的用法,但在实际中,它们可能结合使用为一种模式,比如play框架的JSON用法。// 在JSON化实例之前,必须定义隐式类型Writes[Location]implicit val locationWrites = new Writes[Location] { def write...原创 2018-08-25 19:21:29 · 740 阅读 · 0 评论 -
SBT依赖中“%”与“%%”的区别
在SBT的配置文件build.sbt中,配置库包依赖的方法如下:lazy val sparkSettings = Seq( organization := "com.didichuxing", version := "1.0", scalaVersion := "2.11.10", libraryDependencies := Seq("org.apache.原创 2018-08-21 18:41:07 · 1873 阅读 · 0 评论 -
Scala型变:不变、协变及逆变
Scala在高阶类型的使用中,有三种变化,分别是顺变、协变及逆变,下面详细讲讲它们的含义与应用。1. 高阶类型高阶类型是接受其他参数用来构造新类型的,所以又称为“类型构造器”,用type关键字来定义:// 定义高阶类型type Foo[T] = Function0[T]// 声明高阶类型变量val foo: Foo[Int] = () => 1// 输出...原创 2018-08-31 16:46:31 · 1996 阅读 · 0 评论 -
启动Play报错“play.core.server.DevServerStart”的解决办法
启动Play框架,提示如下错误:[error] java.lang.ClassNotFoundException: play.core.server.DevServerStart[error] at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)[error] at java.ba...原创 2018-08-24 07:40:50 · 1075 阅读 · 0 评论 -
Scala隐式转换函数的应用与总结
在(《Scala隐式类型约束的应用与总结》)[https://blog.youkuaiyun.com/yiifaa/article/details/82054393]中,我们讲解了隐式对象约束的方法,但在实践中,虽然其定义了统一的特质,便于实现与约束,但稍显复杂,这里还有一种替代方案——隐式转换函数,其接口声明如下:def fn[A <% B](x: A) = x它表示参数x的类型是A,但在...原创 2018-08-30 21:44:34 · 1226 阅读 · 0 评论 -
Scala的“match-case”与List析构
scala没有switch语句,但有更强大的“match-case”的语句,在实践中,应用最多的主要是以下三类,尤其是前两种。 1. 类型匹配; 2. 值匹配; 3. 模式匹配;“match-case”的强大体现在“case”语句对scala表达式的支持,以容器为例,看一个加法运算的例子:def plusOne(args: List[Int]): Int = { args...原创 2018-08-22 22:25:56 · 1137 阅读 · 0 评论 -
从JAVA到Scala(三):implicit的三种用法
对scala的隐式参数又爱又恨,既强大得让人欢呼雀跃,但繁琐的机制与晦涩的语法又让人望而却步,总结起来,implicit一共有三种用法,一种比一种强大,这里就不讲太深奥的理论,直接进入应用场景实战。1. 默认参数值首先,需要注意的是,在方法参数上添加implicit关键字对方法几乎没有任何影响,原来的调用方式依旧。其次,implicit作为参数声明时,只能作为方法的唯一参数,是的,你没看错,唯一的参原创 2017-09-29 21:15:42 · 5249 阅读 · 2 评论 -
从JAVA到scala(二):消失的static关键字
scala在JAVA之上增加了很多深奥的关键,例如match、type、implicit,却抹除了我们无比熟悉的static关键字。既然没有static,那我们怎么在scala中定义类的静态方法与属性呢?真要做起来,其实比JAVA还绕(scala真的简洁吗?),具体分为以下两步: 1. 在这个类的同一份文件中添加伴生对象,也就是同名的object,注意一定要在同一份文件中; 2. 在伴生对象定义原创 2017-09-27 22:47:00 · 5324 阅读 · 0 评论 -
SBT启动失败的解决办法
在利用Scala创建Spark项目时,提示如下错误:sbt.librarymanagement.ResolveException: unresolved dependency: com.artima.supersafe#sbtplugin;1.1.3: sbt-plugin-releases: unable to get resource for com.artima.sup...原创 2019-04-22 10:36:41 · 10362 阅读 · 1 评论