• 1,)首先留意一下下边的代码块,他是怎么运行的,貌似在c#中他是出错的,不应该出现这样的写法的,但在scala中侧不然:
  1. package com.dt.study
  2.  
  3. /**
  4. * The package path is com.dt.study.
  5. * Created by tommy duan on 2015/11/16.
  6. */
  7. object HelloScala {
  8. var line = ""
  9. do {
  10. line = readLine()
  11. if (!line.isEmpty) println("Read line is:"+line)
  12. } while (line != "")
  13.  
  14. def main(args: Array[String]): Unit = {
  15. println("Hello Scala!!!")
  16. }
  17. }

运行起来后,会等待输入文字,知道输入空位置,直接走入main函数。

  • 2,)object 在scala中是一个对象,对象声明同类一样,是不需要public修饰的,默认就是public
  • 3,)scala object对象内部的函数都是静态的:访问方式为 HelloScala.

HelloScalaClass

  1. package com.dt.study
  2.  
  3. /**
  4. * The package path is com.dt.study.
  5. * Created by tommy duan on 2015/11/16.
  6. */
  7. class HelloScalaClass {
  8. def sayHello(line:String)={
  9. println(line)
  10. }
  11. }

HelloScalaObject

  1. package com.dt.study
  2.  
  3. /**
  4. * The package path is com.dt.study.
  5. * Created by tommy duan on 2015/11/16.
  6. */
  7. object HelloScalaObject {
  8. var line=""
  9. def sayHello(line:String):Unit={
  10. println(line)
  11. }
  12. }

class 与 object调用

  1. package com.dt.study
  2.  
  3. /**
  4. * The package path is com.dt.study.
  5. * Created by tommy duan on 2015/11/16.
  6. */
  7. object HelloScala {
  8. def main(args: Array[String]): Unit = {
  9. println("Hello Scala!!!")
  10.  
  11. HelloScalaObject.sayHello("Hello scala object")
  12. var scalaCls=new HelloScalaClass();
  13. scalaCls.sayHello("Hello scala class")
  14. }
  15. }

同样object对象内部的属性对象也是静态的,且内部字段默认scala会给其实现get.set函数(但不考虑var类型,private类型)

  • 4,)val 与var类型
  1. package com.dt.study
  2.  
  3. /**
  4. * The package path is com.dt.study.
  5. * Created by tommy duan on 2015/11/16.
  6. */
  7. object HelloScala {
  8. def main(args: Array[String]): Unit = {
  9. println("Hello Scala!!!")
  10.  
  11. var line=""
  12. line="hello"
  13. println(line)
  14.  
  15. val lineVal="hello"
  16. println(lineVal)
  17. lineVal="test"
  18. }
  19. }

在idea编译器中17 lineVal="test" 会报错误,编译不通过。

原因,val是不可以变类型,一旦设置了值后,就不可以更改变量值;而var是可变变量,可以改变值。val像是java中被final修改的变量。

  • scala类和对象中字段的隐藏get set函数实现
  1. package com.dt.study
  2.  
  3. /**
  4. * The package path is com.dt.study.
  5. * Created by tommy duan on 2015/11/16.
  6. */
  7. object HelloScala {
  8. def main(args: Array[String]): Unit = {
  9. println("Hello Scala!!!")
  10.  
  11. println(HelloScalaObject.line)
  12. HelloScalaObject.line="sss"
  13.  
  14. }
  15. }

请留意:

  1. 11 println(HelloScalaObject.line)
  2. 12 HelloScalaObject.line="sss"

这两行代码,第11行代码隐含了几层含义:

1,)line是一个public变量;

2,)调用了HelloScalaObject对象的隐藏line var的get函数;

第12行除了上边1,)外还有一层含义:调用了HelloScalaObject对象的隐藏line var的set函数;

函数返回值问题

  1. package com.dtgroup.study
  2.  
  3. object HelloStduy {
  4. def main(args: Array[String]): Unit = {
  5. println("Hello Scala")
  6.  
  7. var files = (new java.io.File(".")).listFiles()
  8. for (file <- files) println(file)
  9.  
  10. val filePath = "spark.txt"
  11. try {
  12. if (!filePath.isEmpty())
  13. throw new RuntimeException("An error thrown.")
  14. } catch {
  15. case e: Exception => println(e.getMessage())
  16. } finally {
  17.  
  18. }
  19.  
  20. println(returnWithSomething)
  21. }
  22.  
  23. def returnWithSomething():String={
  24. var result=""
  25. var items=new Array[String]()
  26.  
  27. for(i<- to ) items(i)=i.toString
  28.  
  29. result=items.mkString(",")
  30. result
  31. }
  32. }

输出内容:

Hello Scala
.\.cache-main
.\.classpath
.\.project
.\.settings
.\bin
.\src
An error thrown.
0,1,2,3,4,5,6,7,8,9

我们先不看上边的结果为什么,单想象returnWithSomeThing这是个什么?

1,)它在scala中是一个函数,函数一般都是使用def来声明;

2,)在这里它是一个静态函数;

3,)它的返回值类型为String;

4,)该函数的最后一行默认就是返回值,这是规定,也是规范;

5,)def main(args: Array[String]): Unit ,它的返回值类型为Unit,在scala中Unit为空,表示不返回任何类型,同时这里的main函数也是可以不写返回Unit的,格式为:

  1. def main(args: Array[String])={
  2. println("hello main")
  3. }

6,)函数的调用,如果不需要参数可以省略掉();

7,)try{}catch{}finally{} catch中的处理可以使用case来区分不同的错误信息,针对不同的错误类型做出不同的日志记录等处理;

8,)def main(args: Array[String]): Unit中,参数是一个字符数组,参数个的格式就是这样传递的;

9,)参数传递支持多个参数,同时也支持多个参数返回。

传递多参数,返回多参数示例:

  1. package com.dtgroup.study
  2.  
  3. object HelloStduy {
  4. def main(args: Array[String]): Unit = {
  5. println("Hello Scala")
  6. var result0 = returnWithSomething("", )
  7. println(result0._1)
  8. // for (item <- result0._2) println(item)
  9. println(result0._2.mkString(","))
  10. var result1 = returnWithSomething("mmmmm", )
  11.  
  12. println(result1._1)
  13. // for(item <- result1._2) println(item)
  14. println(result1._2.mkString(","))
  15. }
  16.  
  17. def returnWithSomething(arg0: String, arg1: Int*): (Int, Array[String]) = {
  18. var result0 =
  19. var result1 = new Array[String]()
  20.  
  21. for (i <- to ) result1(i) = (i + ).toString()
  22.  
  23. try {
  24. result0 = arg0.toInt
  25. } catch {
  26. case e: Exception => {
  27. result0 =
  28. println("Fail convert to int")
  29. }
  30. } finally {
  31.  
  32. }
  33.  
  34. (result0, result1)
  35. }
  36. }

输出结果:

Hello Scala
1111
1,2,3,4,5,6,7,8,9,10,11
Fail convert to int
2
1,2,3,4,5,6,7,8,9,10,11

Scala 流程空间,函数,异常处理的更多相关文章

  1. Scala深入浅出实战经典-----002Scala函数定义、流程控制、异常处理入门实战

    002-Scala函数定义.流程控制.异常处理入门实战 Scala函数定义 语句结束无分号 定义无参函数 def 函数名称(参数名称:参数类型)[:Unit=]{ 函数体 } 老师的代码 我的实际代码 ...

  2. 2.scala控制结构、函数、异常处理

    2.scala控制结构.函数.异常处理---小书匠,在线编辑器,MARKDOWN,Evernote,文件版本 a:focus { outline: thin dotted #333; outline: ...

  3. scala流程控制语句以及方法和函数

    1.if else表达式 scala中没有三目运算符,因为根本不需要.scala中if else表达式是有返回值的,如果if或者else返回的类型不一样,就返回Any类型(所有类型的公共超类型). 例 ...

  4. Dream------scala--函数定义、流程控制、异常处理

    Dream------scala--函数定义.流程控制.异常处理 一.函数的定义 1.新建工程

  5. 【GoLang】GoLang 的流程与函数

    003.GO流程与函数 1 概述 1.1 Go中流程控制分三大类:条件判断,循环控制和无条件跳转 2 流程 2.1 if 2.1.1 if条件判断语句中不需要括号 2.1.2 条件判断语句里面允许声明 ...

  6. Scala 深入浅出实战经典 第42讲:scala 泛型类,泛型函数,泛型在spark中的广泛应用

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. 【Scala篇】--Scala中的函数

    一.前述 Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明. 二.具体函数 1.Scala函数的定义 def fun (a: Int , b: Int ) ...

  8. Scala 方法与函数

    Scala 方法与函数:http://www.runoob.com/scala/scala-functions.html Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分 ...

  9. Scala 方法和函数

    package com.bigdata // /** Scala 方法和函数:Scala中既有函数也有方法,大多数情况下我们都可以不去理会他们之间的区别. * * 方法:Scala 中的方法跟 Jav ...

随机推荐

  1. 【BZOJ】1513: [POI2006]Tet-Tetris 3D

    题意 给\(n(1 \le n \le 20000)\)个立方体\((x, y, z)\),依次落下.求所有立方体落下完了以后最高的高度. 分析 平面求最大值,平面更新最大值. 题解 二维线段树走起, ...

  2. 【BZOJ】2242: [SDOI2011]计算器

    http://www.lydsy.com/JudgeOnline/problem.php?id=2242 题意:(前两个问略...)第三个问是,求$a^x \equiv b \pmod{p}$最小的$ ...

  3. REST

    REST (REpresentational State Transfer). 为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁. "设计良好的网络应用表现为 ...

  4. Js特效--模仿滚动条(兼容IE8+,FF,Google)

    <html> <head> <style> *{margin:0px;padding:0px;} #box{width:200px;height:500px;pos ...

  5. HDU1568

    Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. JS移动客户端--触屏滑动事件 banner图效果

    JS移动客户端--触屏滑动事件 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的t ...

  7. Git分布式项目管理

          Git简介 Git是什么? Git和SVN一样都是一种高效的管理代码的系统. Git是目前世界上最先进的分布式版本控制系统(没有之一). 创建版本库 什么是版本库呢?版本库又名仓库,英文名 ...

  8. EF框架中加子类后出现列名 'Discriminator' 无效问题

  9. iOS Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:7962

      Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Cac ...

  10. DEDECMS里面DEDE函数解析

    下面来解说下DEDECMS织梦CMS模板里面的函数说明 在文件include/inc_function.php里面 GetCurUrl() 获贴切前的脚本的URL GetAlabNum($str) 把 ...