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. Ubuntu13.04使用Jlink和ST-Link V2烧写STM32F1x和STM32F4x

    近期做研究openpilot和crazyflie2.0,都须要在Linux进行代码的编写和烧录,所以研究了下Linux下如何使用Jlink,还有开源的支持多个仿真器的openocd,可是困难重重.总是 ...

  2. linux中的系统服务--daemon

    简单的说,系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络方面),这个服务就称为 service . 但是 service 的提供总是需要程序的运行吧!否则如何运行呢?所以达成这个 ser ...

  3. NGUI 取ScrollView中遮罩区域4个点

    用panel.localCorners而不是panel.finalClipRegion,Region还要再换算 首先通过ScrollView取panel,然后取Corners,它返回值代表4个点,映射 ...

  4. Atitit php序列化 php的serialize序列化和json序列化

    Atitit php序列化 php的serialize序列化和json序列化 PHP 对不同类型的数据用不同的字母进行标示,Yahoo 开发网站提供的Using Serialized PHP with ...

  5. atitit.《金刚经》与it软件项目管理的启发 读后感attilax

    atitit.<金刚经>与it软件项目管理的启发 读后感attilax 1.1. 经中宣称一切世间事物空幻不实,如梦幻泡如梦幻泡影,实相者则是非相.主 张 放弃对现实世间的执著或眷恋,以般 ...

  6. vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3)

    vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3) Might be a ...

  7. 文件上传之 MultipartFile

    利用MultipartFile(组件)实现文件上传 在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的Mult ...

  8. poj 2846 Repository

    题目大意:给你n个字符串,然后给你m个子串,看这个子串在上面的多少个串中,出现过: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2846 本题可以在字 ...

  9. tomcat能启动正常,但是输入localhost:8080不能登录

    怎么配置JDK和TOMCAT应该百度经验已经很好地解释了. tomcat启动成功了,但是  localhost:8080  登录不成功. 有一种可能,缺少http:// 输入: http://loca ...

  10. 解决:std::ostream operator<< should have been declared inside 'xxx'

    用VS的NMAKE构建,不会报错,但是用GNU MAKE构建,就会报错.(尝试删除Toast.h中第24行的声明) 因此在遇到类似的情况的时候,记得不仅class里面要有friend声明,namesp ...