1.for的使用

for的使用在各种编程语言中是最常见的,这里只是聊聊for在Scala中的表现形式,由于Scala语言是完全面向对象的,所以直接导致for的不同呈现,下面举几个例子说明一下

object For {

def main(args:Array[String]):Unit={

for(i<-1 to 2;j<-1 to 2)

println("i is:"+i+"   j is:"+j)

println("----------------------------------")

for(i<-1 to 2;j<-1 to 2 if i!=j)

println("i is:"+i+"  j is:"+j)

}

}

该代码最后的输出结果为:

在这里解释一下” 1 to 2”,它的实质是”1.(2)”,即对象1调用数字2(意思是1到2),表现出了Scala完全面向对象编程,操作符”<-”是类似于C语言中的指针,意思是指向 。其次,从上面的例子,我们可以看出,在Scala中,for的呈现方式,优化了在C、C++、Java中的for循环嵌套,缩短了代码量。方便、简洁!

2.Function

function即函数,这里我们讲讲函数的声明方式。

object Function {

def main(args:Array[String]):Unit={

/*1.函数有名(可以不用声明函数的类型)*/

def addNum(x:Int)=x+10

println("在函数addNum中最后返回的值为:"+addNum(10))

/*2.函数匿名(可以不用声明函数的类型)*/

val add=(x:Int)=>x+20

println("在匿名函数中最后的返回值为:"+add(10))

/*3.递归算法(必须声明函数的类型)*/

def fac(n:Int):Int=if(n<=0)1 else n*fac(n-1)

println("当n=5时该递归算法的最后的结果为:"+fac(5))

/*4.初始化参数和参数覆盖*/

def combine(content:String,left:String="[",right:String="]")=left+content+right

println("当只有一个参数时:"+combine("I am xiaoming"))

println("当有两个参数时:"+combine("I am xiao ming","("))

println("当有三个参数时:"+combine("I am xiao ming","(",")"))

}

}

其输出结果为:

我在代码中都写了注释,但我还是得强调一下,在我们用递归函数算法时,由于在递归算法中是算法嵌套,Scala也不能识别其结果终究是什么类型,所以,我们在定义函数时,务必要带上我们需要的函数返回值类型

3.Lazy

lazy即懒值,Scala中通过lazy关键字来定义惰性变量,惰性变量只能是不可变变量。例如下面,只有在调用惰性变量b的toString方法的时候,才会去实例化b这个变量。可以看到“Test”是先打印出来的。

class Book(name:String){

println("new book"+name)

  override def toString() = "《"+name+"》"

}

  lazy val b = new Book("Java")

  println("Test")

  println(b.toString)

}

其输出结果为:

Test

new bookJava

《Java》

Scala学习之For、Function、Lazy(4)的更多相关文章

  1. scala学习笔记:理解lazy值

    scala> var counter = 0 counter: Int = 0 scala> def foo = {counter += 1; counter} foo: Int scal ...

  2. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  3. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  4. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  5. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  6. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

  7. Scala学习网址

    scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124

  8. Spark之Scala学习

    1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.t ...

  9. Scala学习之路----基础入门

    一.Scala解释器的使用 REPL:Read(取值)-> Evaluation(求值)-> Print(打印)-> Loop(循环) scala解释器也被称为REPL,会快速编译s ...

  10. 转载-聊一聊深度学习的activation function

    目录 1. 背景 2. 深度学习中常见的激活函数 2.1 Sigmoid函数 2.2 tanh函数 2.3 ReLU函数 2.4 Leaky ReLu函数 2.5 ELU(Exponential Li ...

随机推荐

  1. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第11章 | 文件和素材

    打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...

  2. 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!

    在Win7中IIS配置Asp.Net虚拟文件夹的方法总结! 一.右键[站点].点击[加入虚拟文件夹]或[虚拟应用程序],笔者建议最好建立虚拟应用程序,由于这就跟一个站点差点儿相同.不用考虑路径问题. ...

  3. NFS介绍

    一.NFS服务介绍 NFS是 Network File system的缩写 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机 ...

  4. 多线程-CountDownLatch,CyclicBarrier,Semaphore,Exchanger,Phaser

    CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数初始化CountDownLatch.调用countDown()计数减一, ...

  5. atitit.  web组件化原理与设计

    atitit.  web组件化原理与设计 1. Web Components提供了一种组件化的推荐方式,具体来说,就是:1 2. 组件化的本质目的并不一定是要为了可复用,而是提升可维护性. 不具有复用 ...

  6. 众数问题(山东理工OJ)

    题目描写叙述 给定含有n个元素的多重集合S,每一个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数. 比如,S={1,2,2,2,3.5}.多重集S的众数是2,其重数为3. 对于 ...

  7. Yii2中对数据库的查询方法如下

    User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find()->w ...

  8. Makefile 自动变量之 $(@D),$(@F)

    参考:http://www.gnu.org/software/make/manual/make.html '$(@D)'The directory part of the file name of t ...

  9. 使用 Bolt 实现 GridView 表格控件

    用 Bolt 实现了一个表格控件: 1. 提供 Insert,Remove,Get,Set 接口,可以为表格增删数据: 2. 通过  ItemClass, ItemSetDataFunc 属性来指定显 ...

  10. 分时段显示不同的提示的网页JS特效代码

    脚本说明: 把如下代码加入body区域中 <SCRIPT> today=new Date(); var day; var date; var hello; var wel; hour=ne ...