scala语法
1:双重for循环(相当于j是i的内存循环):for (i <-0 to n; j <-10 to 20){ println(i);println(j)}
2:单层for循环:for (i <-0 to n) print(i)
3:单层for循环(不包含上限):for (i <-0 until n) print(i)
4:break需要借助breakable:
import scala.util.control.Break._
n=10
breakable { for (i <- 0 until n) {
if (i==5) break; //退出breakable块
print(i)
}
}
5:函数:(列表参数和普通参数)
def test(a:Int=123,b:String="zzq"):Int={//参数:参数类型=参数默认值):函数返回值
if(a>123){
print("年龄:"+a)
}else{
print("年龄:"+a+" 姓名:"+b)
}
var sum=100;
sum //返回值
}
//调用 test1(1 to 5:_*) 这样就形成了1~5的集合
def test1(c:Int*)={
var sum=0;
for(item <- c){
sum+=item
}
sum //返回值
}
6:类的定义
class Test1{//类定义
private var t1=0
def getT1=t1
def getT1_=(newV:Int){
t1=newV
}
}
//主构造函数需要在类外部声明(如果构造函数传递的参数在内部其它方法中使用,则会变成private[this]这样的绝对私有变量)
class Test1(new1:Int=123,new2:String="abc"){ print(new1+" -- "+new2)}
7:伴生类和伴生对象在同一个文件中可以相互访问private field变量
object Test2{//一般用作静态方法访问的静态类,可理解为单例
private var _i=10
print("执行一次")
def getI=_i
def apply=new Test2("cba")//spark中大量使用伴生类重写apply方法来进行class对象的隐式创建方式
}
class Test2(a:String="abc"){
print(a+" -- "+Test2._i)
}
//执行结果
scala> Test2.getI
执行一次res10: Int = 10
scala> Test2.getI
res11: Int = 10
scala> var yy=new Test2("kkk")
kkk -- 10yy: Test2 = Test2@2fe88a09
8:枚举值
//scala中的枚举值
object Em extends Enumeration{
val or= Value(0,"or")
val and= Value(1,"and")
val where= Value(2,"where")
}
//按索引标记取值:Em(0)
//按枚举名称标记取值:Em.withName("where")
//遍历:for(ele<- Em.values) print(ele)
9:继承:
class T1{
final def abc(){
println("这是abc")
}
def abc1(){
println("这是abc1")
}
final var abc2=123
val abc3=1234//只有这种val才能被覆盖
}
class T2 extends T1{
override val abc3=990
override def abc1(){
println("这是重写的abc1 ")
}
}
10:类型判断
//模糊判断类型
scala> t2.isInstanceOf[T1]
res14: Boolean = true scala> t2.isInstanceOf[T2]
res15: Boolean = true //精确判断类型
scala> t2.getClass==classOf[T2]
res17: Boolean = true scala> t2.getClass==classOf[T1]
res18: Boolean = false
11:scala中的模式匹配
//传入的参数,但判断类型时实际使用的是isInstanceOf[xxx]
def getNum(item:Any)={
item match{
case x:String => print("String")
case i:Int => print("Int")
case c:Char => print("Char")
case _=>0//这个是完全没有匹配上的情况
}
}
def testMatch(i:Int,s:String="default"):Unit={
i match {
case 1 => print("数字:"+1)
case 2 => print("数字:"+2)
case 3 => print("数字:"+3)
case 5 if(s equals "mz") => print("数字:"+3+"mz")//匹配后仍可添加判断
case tmp1 => print("tmp1的赋值数字:"+tmp1)//会将i赋值给tmp1变量
case _ => print("其它喽")
}
}
12:triat可以多继承,其中可以有实现方法和未实现的抽象方法,但一般triat用于书写工具方法,在不同级别的实现类中去override,而且多重继承后会有责任链的特性
trait Log{
var t:Int
def wlog(name:String){}
}
trait MyLog extends Log{
override var t=100//继承了Log的traint则必须要初始化
override def wlog(name:String){
print("MyLog ->"+name)
super.wlog(name)
}
}
trait MyLog1 extends Log {
override def wlog(name:String){
print("MyLog1 ->"+name)
super.wlog(name)
}
}
class P extends MyLog with MyLog1 {//调用链按照继承顺序,构造函数的调用也是按照继承顺序,以此类推(如果有同一父trait被多次继承则构造函数仅仅调用1次)
def get(){
wlog("开始调用 ")
}
}
scala语法的更多相关文章
- scala语法在spark withScope上的应用
withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...
- scala语法解析(解码指环)
看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.
- 1.scala语法
对象的apply方法 (1)对象调用apply()方法,可省略成() (2)string对象的apply方法返回第n个字符 "hello"(4) //'o' if语句的返回值 ja ...
- Scala语法笔记
JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法 JAVA与C++的?:操作符 等同于Scala的 if ( x &g ...
- Java和Scala语法比较
类型推断 挑逗指数: 四星 我们知道,Scala一向以强大的类型推断闻名于世.很多时候,我们无须关心Scala类型推断系统的存在,因为很多时候它推断的结果跟直觉是一致的. Java在2016 年也新增 ...
- Spark记录-Scala语法基础
参考:http://docs.scala-lang.org/cheatsheets/index.html.http://docs.scala-lang.org/.http://www.scala-la ...
- Scala 语法基础
一 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Java虚拟机上,并兼容现有的Java程序.Scal ...
- Scala 语法(一)
(1)基本语法 变量 val var(可变变量): 数据类型 Byte,Char,Int,Short,Long,String(字符),Float,Double,Boolean(true,flase). ...
- Scala语法(二)
(1)类,对象 //定义类(属性.方法),实例化对象 class counter{ *//主构造器 class counter(name:String,mode:Int){ ... } 实例化:val ...
随机推荐
- Series 入门(创建和增删改查)
Series 是pandas两大数据结构中(DataFrame,Series)的一种.使用pandas 前需要将pandas 模块引入,因为Series和DataFrame用的次数非常多,所以将其引入 ...
- AllPay(欧付宝)支付接口集成
AllPay,http://www.allpay.com.tw/,欧付宝是台湾知名的第三方支付公司,拥有丰富的支付模式(支持和支付宝.财付通),只需要一次对接,各种支付模式均可使用. 接口编写SDK: ...
- GitStack 第三方开源服务器端
GitStack 开源集成Git的界面服务器端 官网URL:http://gitstack.com 详情 请看<分布式版本控制系统Git--使用GitStack+TortoiseGi ...
- 网络协议TCP/IP、IPX/SPX、NETBEUI简介
网络中不同的工作站,服务器之间能传输数据,源于协议的存在.随着网络的发展,不同的开发商开发了不同的通信方式.为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言.因而必须开发严格的标准 ...
- Storm常见模式——流聚合
转自:http://www.cnblogs.com/panfeng412/archive/2012/06/04/storm-common-patterns-of-stream-join.html 流聚 ...
- Java如何获取本地计算机的IP地址和主机名?
在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com. ...
- NUC972---Linux驱动开发
驱动开发是嵌入式 Linux 产品开发的重要组成部分,驱动是将芯片底层与Linux应用连接起来的桥梁.驱动程序的好坏直接影响和决定着产品的稳定性,稳定的驱动程序是产品可靠性的基石. 编写 Linux ...
- 【class2src】Decompiler
方法源自:https://stackoverflow.com/questions/272535/how-do-i-decompile-java-class-files 功能:给定一个.class文件, ...
- Git使用基础篇
Git使用基础篇 前言 Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版 本控制工具可以对开发产生如此之多 ...
- Unity ---WidgetsUI CreateTileView Demo
以下教程基于:WidgetsUI 第三方扩展包 WidgtsUI 官网文档地址:https://ilih.ru/unity-assets/UIWidgets/docs/ 1.创建一个空GameObje ...