[转帖]Scala学习笔记之Scala基础_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3086 | 回复: 0   主题: [转帖]Scala学习笔记之Scala基础        下一篇 
jie.liang
注册用户
等级:少校
经验:1003
发帖:77
精华:0
注册:2013-10-11
状态:离线
发送短消息息给jie.liang 加好友    发送短消息息给jie.liang 发消息
发表于: IP:您无权察看 2013-10-22 8:48:38 | [全部帖] [楼主帖] 楼主

Scala基础


北京联动北方科技有限公司

Scala中的每一个表达式都有一个值

变量声明



北京联动北方科技有限公司

1.val不变量,var变量,建议使用val,申明不用加类型

2.加类型申明:val xmax,ymax:String = null

val细节


val声明的变量仅仅不允许引用重新分配,而不阻止对象内部的变化

Unit


scala中的()叫做Unit类,相当于其他语言中的void,表示无值.

异常


scala异常与Java类似,但是scala没有受检异常 ,既不需要在方法声明时声明会抛出的异常。

    1.可以在if/else处抛出异常

    2.异常处理过程。

try{
      process(in)
}catch{
case _:MalformedUrlException=>print();
case ex:IOException=>ex.printtlnStack()
}


       这儿的_代表丢弃异常。

    3.可以使用try{}catch{}finally{}

子主题


枚举


定义:

object TrafficLightColor extends Enumeration{val Red,Yellow,Green=Value}
object TrafficLightColor extends Enumeration{val Red = Value(0,"Stop"),Yellow=Value(1,"end"),Green=Value}


     其中value是一个内部类,第一个属性是ID,第二个是name

    引入:import TranfficLight._

    引用:for(c<-TranfficLight.values);

TranfficLight(0);
TranfficLight.withName("red")


脚本和Main的区别


scala中的main和脚本与Python大致相同,但是Scala的main是一个object,而Python则是统一的

main方法


as:object hell{def main(args:Array[String]){}}
as:object hello extends App{if()..}//注意没有main方法,注意这种方法仅仅使用于简单以及单线程中


控制结构



北京联动北方科技有限公司

scala的控制结构都可以返回一个值,因此常常像函数那样在最后一个块语句中写上放回值

当然也可以把结果赋给一个量

val filename =if (!args.isEmpty) args(0) else "default.txt"


另外也可以像常规的控制结构那样

var filename = "default.txt"
if (!args.isEmpty)
filename = args(0)
if


由于每一个表达式都有值,因此可以写出简写的三目表达式

if (x > y) x else y


for和foreach



北京联动北方科技有限公司

for


北京联动北方科技有限公司

1.unit和to的区别 i<-1 to 10//1...10,1 until 10//1...9

2.如果一个对象可以迭代那么可以简写 i <- object

3.在for中可以添加一个过滤器

val filesHere = (new java.io.File(".")).listFiles
for (file <filesHere if file.getName.endsWith(".scala"))
println(file)
for (
file <filesHere
if file.isFile
if file.getName.endsWith(".scala")
) println(file)//注意这人的for可用圆括号,也可用大括号


4.for中的变量没有声明,其默认val

5.to仅仅可以表示增加,如果要减少使用reverse

6.yield返回的是整个for语句块的值,因此必须把yield放在整个for语句块的值,因此如下是错的

val list = for(
file <- filesHere
if file.isFile
if !file.getName.endsWith(".scala")
){print(file); yield file}


而要把yield放在整个语句的开始

val list = for(
file <- filesHere
if file.isFile
if !file.getName.endsWith(".scala")
)yield{print(file); file}


对于一般的编程任务,可以简单的如下

def scalaFiles =for {
      file <filesHere
      if file.getName.endsWith(".scala")
} yield file


for高级


1.

for (p <- persons;n = p.name; if (n startsWith "To"))
yield n
for {
      p <- persons
      n = p.name
      if (n startsWith "To")
} yield


可以看到for中至少需要一个迭代,其他的语句都可以有多个

2.有多个迭代式时,各个元素组合

for (x <- List(1, 2); y <- List("one", "two"))
yield (x, y)


结果

res3: List[(Int, java.lang.String)] =List((1,one), (1,two), (2,one), (2,two))
foreach


一般在可以迭代的类中,有一个foreach循环,foreach接受一个需要一个参数的函数,foreach在序列的每一个值上迭代使用函数

as “Hello”.foreach((c:Char)=>print(c))//一个lamda表达式
或者简单的写为,“Hello”.foreach(print)
异常
val half =if (n % 2 == 0) n / 2 else throw new RuntimeException("n must be even")
try {
      val f = new FileReader("input.txt")
      // Use and close file
} catch {
case ex: FileNotFoundException => // Handle missing file
case ex: IOException => // Handle other I/O error
}
Switch
val firstArg = if (args.length > 0) args(0) else ""
firstArg match {
      case "salt" => println("pepper")
      case "chips" => println("salsa")
      case "eggs" => println("bacon")
      case _ => println("huh?")
}


1.scala可以把任意类型的值用在switch中,而Java不可以。

2.case 可以加守卫

3.scala中默认break

4.switch可以返回值

val firstArg = if (!args.isEmpty) args(0) else ""
val friend = firstArg match {
      case "salt" => "pepper"
      case "chips" => "salsa"
      case "eggs" => "bacon"
      case _ => "huh?"
}
println(friend)




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论