模式匹配使用提取器:
当一个类的实例后跟括号使用零个或多个参数的列表,所述编译器调用应用的方法在该实例上。我们可以定义同时适用对象和类。
如上述所提到的,unapply方法的目的是提取我们寻找一个特定的值。它相反的操作和apply一样。当比较使用匹配语句中unapply方法的提取对象将被自动执行,如下所示:
object Test {
def main(args: Array[String]) {
val x = Test(5)
println(x)
x match
{
case Test(num) => println(x+" is bigger two times than "+num)
//unapply is invoked
case _ => println("i cannot calculate")
}
}
def apply(x: Int) = x*2
def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}
让我们编译和运行上面的程序,这将产生以下结果:
C:/>scalac Test.scala
C:/>scala Test
10
10 is bigger two times than 5
C:/>
Scala打开文件是利用Java对象和java.io.File,它们都可在Scala编程中用来读取和写入文件。以下是写入文件的一个例子:
import java.io._
object Test {
def main(args: Array[String]) {
val writer = new PrintWriter(new File("test.txt" ))
writer.write("Hello Scala")
writer.close()
}
}
当上面的代码被编译和执行,它会创建一个有“Hello Scala”内容的文件。
C:/>scalac Test.scala
C:/>scala Test
C:/>
从屏幕读取一行:
有时需要从屏幕上读取用户输入,然后进行某些进一步的处理。下面的例子说明了如何从屏幕上读取输入:
object Test {
def main(args: Array[String]) {
print("Please enter your input : " )
val line = Console.readLine
println("Thanks, you just typed: " + line)
}
}
当上面的代码被编译和执行,它会提示输入内容,并继续进行,直到按ENTER(回车)键。
C:/>scalac Test.scala
C:/>scala Test
scala Test
Please enter your input : Scala is great
Thanks, you just typed: Scala is great
C:/>
读取文件内容:
从文件中读取是非常简单的。可以使用Scala的Source 类和它配套对象读取文件。以下是这些显示如何从之前创建“test.txt”文件中读取内容的示例:
import scala.io.Source
object Test {
def main(args: Array[String]) {
println("Following is the content read:" )
Source.fromFile("test.txt" ).foreach{
print
}
}
}
当上述代码被编译和执行时,它将读取test.txt文件并在屏幕上显示内容:
C:/>scalac Test.scala
C:/>scala Test
scala Test
Following is the content read:
Hello Scala
C:/>
from: http://www.yiibai.com/scala/scala_basic_syntax.html