scala语言基础学习



1:书写递归函数的时候,必须指定返回类型,不然编译器无法校验递归函数的返回值
def fac(n:Int):Int = if(n<=0) 1 else n * fac(n-1)


2:当要往一个序列传入一个参数区间的时候可以加:_*
val s = sum (1 to 5 :_*)


def recursiveSum(args:Int*):Int={
if(args.length ==0) 0
elseargs.head+recursiveSum(args.tail:_*)
}




3:懒值
当一个变量被声明为lazy的时候,只有在第一次别调用的时候才会去初始化它的值。
lazy val words =scala.io.Source.fromFile("/usr/share.dict.words").mkString




4:ArrayBuffer可变长度的集合
val b = ArrayBuffer[Int]()
b+=1
b+=(1,2,3,4)
b++=Array(2,4,6,8)
b.toArray
b.toBuffer(将数组转换成数组缓冲)




5:数组转换
a.fliter(_ % 2==0).map(2*_)
for(elem<-a if elem % 2==0)yield 2*elem   ===》守卫模式


6:二维数组
val matrix = Array.ofDim[Double](3,4)   matrix(row)(column)
---不规则的二维数组
val triangle = new Array[Array[Int]](10)
for(i<-0 until triangle.length)
triangle(i) = new Array[Int](i+1)


7:类的学习
如果类属性不需要任何getter和setter可以将该字段声明为private[this]
Scala允许你将访问权赋予指定的类,private[类名]修饰符可以定义仅有指定类的方法可以访问给定字段,这里类名必须是当前定义的类或者包含该类的外部类


如果类名之后没有参数,该类具备一个午参主构造器,则会样一个构造器仅仅简单执行类体中的所有语句而已
class MyProg{
private val progs = new Properties
props.load(new FileReader("myprog.properties"))
}


类的伴生对象可以相互访问私有特性,他们必须存在于同一个源文件中 class Account{里面可以调用下面伴生对象的私有方法Account.def()进行调用}  Object Accout{}




每个包都可以有一个包对象,需要在父包中定义它,且名称和子包一样。
package com.hostman.impatient
package Object people{
val defaultName ="john"
}
package people{
class person{
var name = defaultName}
...
}




包引入的重命名还有隐藏
import java.util.{HashMap=>JavaHashMap}
import Scala.collection.mutable._
----隐藏(所有HashMap是指向Scala.collection.mutable.HashMap
import java.util.(HashMap=>_,_}
import Scala.collection.mutable._


隐式引入(后面引入的会覆盖前面引入的,针对同名类)
import java.lang_
import scala._
import Predef._


继承类的时候,继承抽象类时,重写抽象方法不需要写override,如果不是抽象方法,override是必须写的


文件读取
import scala.io.Source
val source = Source.fromFile("myfile.txt","UTF-8")
val lineIterator = source.getLines
for(1<-lineIterator){}
val lines = source.getLines.toArray
val contents = source.mkString


---读取字符
val source = Source.fromFile("myfile.txt","UTF-8")
val iter=  source.buffered
while(iter.hashNext){if(iter.head ...}


source.close()




循环遍历某目录下的所有子目录
import java.io.File
def subdirs(dir :File):Iterator[File]={
val children =dir.listFiles.filter(_.isDirectory)
children.toIterator ++ children.toIterator.flatMap(subdirs _)
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值