Scala学习

0、scala是Java语言脚本化(所以它的底层还是Java),它是面向函数编程
1、scala判断一个数据或者对象的类型只需要在该对象后面添加 .getClass.getSimpleName
2、显示找不到主类:make directory as source root
3、报错:object FloatRef does not have a member create。。
是因为pom文件中scala相关依赖没加进去,如

		<dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-compiler</artifactId>
            <version>${scala.version}</version>
        </dependency>

4、scala中,对于mymap = map(“ljy”, 100), value = mymap.get(“ljy”)等于Some(100), 此时不能进行value.toString().toLong,否则会报NumberFormatException的错误,应该value.getOrElse(0)
5、scala if语句简写:val age = if (name==“hxt”) 20 else 30
6、scala代码里面执行shell命令:

	import scala.sys.process._
	"ls -l"!		//在结尾加!表示执行外部命令
	val list = "ls -l" #|  "grep P" !		//不能在命令表达式中直接用管道, 比如 "ls | grep XXX" 这样不灵,必须用 #| 声明。

7、字符串中的变量替换,Scala中基础的字符串插值就是在字符串前加字幕‘s’,然后在字符串中放入变量

    var name = "zhangsan"
    var age = 15
    println(s"name=$name,age=$age")

8、var name:String = _ 等价于 var name:String=null
9、trait:特质,同时拥有抽象方法和具体方法,跟java中接口差不多,但是不能完全等同,因为接口不能有具体方法。而且某个类要是实现trait,用的是extends而不是implement
10、柯理化:两个参数的函数变成一个参数的函数,返回的是一个函数,该函数的参数是原来的第二个参数
原来 :def add(a:Int,b:Int) = a + b
柯理化后: def add(a:Int) = (b:Int)=>a+b //先传一个参数a,再传另一个参数b
也可以化简成 def add(a:Int)(b:Int) //类似这种多个参数的形式就是柯理化
11、Actor:和Java中的线程类似

1.定义Actor类
  import scala.actors.Actor
  class MyActor extends Actor{        //继承Actor类
	def act{			//实现act方法
	  while(true){
		receive{		//不断接收信息。所以如果没有消息来的话,就会阻塞
		  case "hi" => println("hello")
		}
	}
	}
  }
给MyActor发送消息:MyActor ! hi   (消息可以是发给自己,也可以是发给别人。在receive里面引入另一个actor的引用,就是发给别人)
2.创建Actor对象。并让它运行
  val act = new MyActor 
  act.start()

12、=> 匿名函数(Anonymous Functions),表示创建一个函数实例。
比如:(x: Int) => x + 1 整个表达式就是一个匿名函数,和如下JAVA方法表示的含义一样:
public int function(int x){
return x+1;
}
13、java和scala的区别和联系

  • 1)scala底层用到的还是java,只是在java上套了一层壳,由于scala最终被编译为.class,所以其实本质上还是java, 在scala中可以任意的调用java的api
    .java –> .class –> jvm
    .scala –> .class –> jvm
  • 2)函数式编程:主要思想是把运算过程尽量写成一系列嵌套的函数调用。比如spark的rdd.map(x…),整个代码都在map整个函数里面
  • 3)scala是弱类型语言,只有var和val。scala的可以用option代替空值,而java是null,要加判断否则会空指针
  • 4)scala中没有static,但是可以用object来达到java中相同的效果,scala中的object可以实现单例对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值