标签:表达 vararg 推导 级别 throw 绑定 sam ocs code
def 定义的是方法,而不是函数_ 后缀将普通方法变为函数: ceil _
_ 后缀_ 简写switch,默认分支为 case _;可避免 switch 语句中因缺少 break 带来的 fall-through 问题Boolean 条件都可作为模式守卫;case ... if ... => ...case 关键字后接变量名或对应数据结构中使用变量名,那么匹配项就赋值给该变量,变量名必须以小写字母开头| 分隔同一匹配的多个可选项,此时不可使用变量绑定元素isInstanceOf 和 asInstanceOf,直接进行类型转换
Map 类型(可使用 case Map[_, _],不可使用 case Map[Int, Int])Array 的类型不会被擦除匹配数组
case Array(x, y) => s"$x $y" // 匹配长度为2的数组,并将分别绑定到 x, y
case Array(0, rest @ _*) => rest.min // 可变参数匹配 List
case x :: y :: Nil => ... // 绑定参数
case head :: tail => ... // 解构 head , tail匹配元组
case (0, _) => ... // 匹配第一个元素为0
case (x, y) => ... // 绑定参数match 模式匹配加上赋值操作
val (x, y) = (1, 2)val Array(f, s, rest @ _*) = arr用于 for 循环遍历集合,匹配符合条件的元素
for ((k, v) <- System.getProperties()) println(s"$k $v")
// 匹配 value 为 "" 的项,其他的则被忽略
for ((k, "") <- System.getProperties()) println(k)
// if guard 过滤
for ((k, v) <- System.getProperties() if v == "") println(k)val,默认提供 apply、unapply、toString、equals、hashCode、copy
copy 用于复制对象时,可使用命名参数来修改属性case class X 使用时 case X() => ...,需要括号case object S 单例,使用时 case S => ..., 不要括号:: 也是 case class,配合中缀表达式,就是常见的匹配方式,case head :: tail,实际调用 ::(head, tail)List 等sealed 密封的
Option 也是使用 case class 来表示是否有值存在的
Some 封装值,子类 None 表示无值"" 或 null 更加安全Map 进行 get 操作返回的也是 Option,也可使用模式匹配来处理getOrElse 尝试获取值,未获取到则使用给定的值apply 从模式匹配中计算函数值,isDefinedAt 判断输入是否匹配定义的模式case 语句块是偏函数PartialFunction[A, B] 的实例, A 为输入类型,B 为输出类型
lift 方法,将偏函数变为常规函数,返回值为 Option[B]Function.unlift 将返回 Option[B] 的函数变为偏函数Seq[A] 也是偏函数 PartialFunction[Int, A]Map[K, V] 也是偏函数 PartialFunction[K, V]catch 语句也是偏函数,可在 catch 块中使用模式匹配处理异常@BeanProperty 会自动生成 getter/setterclass Credential @Inject() (var username: String, var password: String)(map.get(key): @unchecked) ...class Test[@specialized T]def name: String @LocalizedAnnotationTypeAnnotation@param, @field, @getter, @setter, @beanGetter, @beanSetter@volatile 对应 volatile 关键字@transient 对应 transient 关键字@strictfp 对应 strictfp 关键字@native 对应 native 关键字@cloneable 对应 Cloneable@remote 对应 java.rmi.Remote@SerialVersionUID 代替序列化字段@throws(classOf[Exception]) 来处理 Java 中的受检异常@varargs 处理可变参数
@varargs def name(args: String*) 生成 void name(String... args)@varargs 则可变参数会被转换成 Seq[T]@tailrec 会尝试优化尾递归调用,将其变为循环@switch 编译器会检查 match 表达式是否编译为 ableswitch 或 lookupswitch,如果被编译成一系列条件表达式,则会抛出异常@inline, @noinline 建议编译器是否将方法替换为行内调用@elidable, 用于标注在生产代码中可移除的方法
elidable 对象定义了很多级别常量可直接使用,未指定参数时默认是 SERVERE 即 1000(包含1000)@specialized 处理基础类型,自动生成基础类型对应包装类的方法标签:表达 vararg 推导 级别 throw 绑定 sam ocs code
原文地址:https://www.cnblogs.com/yuanzam/p/11614233.html