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. C# 操作ini配置文件

    最近使用Winform做一个小系统,由于需要保存一些默认配置项.自然就想到了轻量级的配置文件类型ini.在此也分享和记录一下实现方式,方便以后查询和使用. 废话不多说上代码: 实现公共函数↓ publ ...

  2. ajax跨域--jsop方法

    1.什么是JSONP? 要了解JSONP,不得不提一下JSON,那么什么是json ? json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表 ...

  3. JS正则表达式(转载)

    在JavaScript中,RegExp对象表示正则表达式,用来对字符串进行匹配. 一.两种定义方法: 1.直接量法: /pattern/attribute 2.对象法: new RegExp(patt ...

  4. Android:实现手势滑动的事件处理方法

            首先得Activity必须实现OnGestureListener接口,该接口提供了关于手势操作的一些方法, onDown方法:onDown是,一旦触摸屏按下,就马上产生onDown事件 ...

  5. STL容器分析--set

    STL 对这个序列可以进行查找,插入删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系,并且当游标指向一个已删除的元素时,删除操作无效.而一个经过更正的和更加实际的定义 ...

  6. (41)JS运动之右側中间悬浮框(对联悬浮框)

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  7. Laravel建站03--建立前台文章列表和文章详情

    经过了前面的开发环境搭建和数据库配置.git配置的准备工作以后,现在可以开始动作做点什么了. 先从简单的开始,那就先来个文章列表和详情页吧. 这期间可以学习到路由.建立model.controller ...

  8. Android--&gt;Realm(数据库ORM)使用体验,lambda表达式

    Realm,为移动设备而生.替代 SQLite 和 Core Data. 非常庆幸,官方帮助文档有中文: https://realm.io/cn/docs/java/latest/ 尽管眼下最新的版本 ...

  9. c语言中数组名和指针变量的区别

    编译器工作原理:在64位的计算机中,当创建一个指针变量时,计算机会为它分配8个字节的存储空间.但如果创建的是数组呢?计算机会为数组分配存储空间,但不会为数组变量分配任何空间,编译器仅在出现它的地方把它 ...

  10. c#各类型转byte[]或转回

    var tmp = BitConverter.ToInt32(new byte[]{...}); var bytes = BitConverter.GetBytes(tmp); 而String转byt ...