Scala进阶编程指南

Scala进阶实战

包和引入

Scala的包和Java中的命名空间的目的是相同的。

package spark.navigation {
    abstract class Navigator{
        def act
    }
}
package tests {
    //spark.navigation.tests
    class NavigatorSuite
}

//相同作用域的包对象可以直接访问
package object people {  
    val defaultName = "Scala"  
}
package people {  
    class people {  
        var name = defaultName 
    }  
}

//隐式引用的包
import java.lang._      //java.lang包里的所有东西
import scala._          //scala包里的所有东西
import Predef._         //Predef对象里的所有东西

访问权限

private[package] 访问权限给予package包内的所有方法和对象。
protected[package] 访问权限给予package包内的所有方法和对象还有对象的子类。

package spark{
    package navigation{
        private[spark] class Navigator{
            protected[navigation] def useStarChart() {}
            class LegOfJourney {
                private[Navigator] val distance =100
            }
            private[this] var speed = 200
        }
    }

    package launch{
        import navigation._
        object Vehicle {
            private[launch] val guide = new Navigator
        }
    }
}

文件读写

//打开文件
val file = Source.fromFile("E:\\WangJialin.txt") 
for (line <- file.getLines){ println(line)}
file.close

//加载html
val webFile = Source.fromURL("http://spark.apache.org/")
webFile.foreach(print)
webFile.close

//写入文件
val writer = new PrintWriter(new File("scalaFile.txt" ))
for (i <- 1 to 100) writer.println(i)
writer.close()

正则表达式

val regex="""([0-9]+) ([a-z]+)""".r
val numPattern = "[0-9]+".r
val numberPattern = """\s+[0-9]+\s+""".r

//findAllIn方法返回遍历所有匹配项的迭代器
for (matchString <- numPattern.findAllIn("99345 Scala, 22298 Spark")) println(matchString)

//找到首个匹配项
println(numberPattern.findFirstIn("99ss java, 222 hadoop"))

val numitemPattern="""([0-9]+) ([a-z]+)""".r

//模式匹配
val numitemPattern(num, item) = "99 hadoop"

val line = "93s459 spark"
line match{
    case numitemPattern(num, blog) => println(num + "\t" + blog)
    case _ => println("Oops...")
}

内部函数

//argument 10 "E:\\test.txt"
def processData(filename: String, width: Int) {
    def processLine(line: String) {
        if (line.length > width)
            println(filename +": "+ line)
    }

    val source = Source.fromFile(filename)
    for (line <- source.getLines)
        processLine(line)
}

偏函数

def sum(a : Int, b : Int, c : Int) = a + b + c
println(sum(1, 2, 3))

val fp_a = sum _
println(fp_a(1, 2, 3))
println(fp_a.apply(1, 2, 3))
val fp_b = sum(1, _: Int, 3)
println(fp_b(2))
println(fp_b(10))

闭包

def add(more : Int) = (x : Int) => x + more
val x = add(1)                 //匿名函数(x : Int) => x + 1
val y = add(2)                 //匿名函数(y : Int) => x + 2
println(x(10))
println(y(100))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值