当程序的代码量增大时,就需要对各功能模块进行分割,这些分割的小模块就是本文中接下来会进行分析的函数.接下来的部分会讲解包括函数嵌套,函数字面量,以及函数值等概念. 一.方法 一会函数一会方法的,是不是有点晕?严格来说,任何方法都是一个函数,只不过我们称呼那些写在类定义中的某个对象拥有的函数成员为方法.例如下面代码中的LongLines对象就定义了两个方法,可以用于打开指定文件名的文件并读取其中的内容,并且将其中一行的长度超过给定值的内容打印出来. object LongLines { // 接收…
续前文: 中文代码示例之Programming in Scala学习笔记第二三章 中文代码示例之Programming in Scala笔记第四五六章. 同样仅节选有意思的例程部分作演示之用. 源文档仍在: program-in-chinese/Programming_in_Scala_study_notes_zh 第七章 内置控制结构 7.8中改为函数式风格的乘法表: def 创建行序列(行: Int) = for (列 <- 1 to 10) yield { val 乘积 = (行 * 列)…
续前文: 中文代码示例之Programming in Scala笔记第七八章 源文档库: program-in-chinese/Programming_in_Scala_study_notes_zh 疑似中文命名bug program-in-chinese/Programming_in_Scala_study_notes_zh. 复现如下. 需要深究: scala> for ((行1, 行2) <- Array(1,2) zip Array("a", "b&quo…
本系列博客以<Programming in Scala 2nd Edition>为主,围绕其中的代码片段进行学习和分析. 本文主要梳理Chapter2和Chapter3中涉及到的主要概念. 一.变量定义时的val和var 在Scala中定义一个变量可以使用两种关键字var和val.其中val类似于Java中的final类型变量,值不可变.var定义的变量值是可变的. 1.val变量 当给一个val变量重新赋值时就会出现如下提示: 2.var变量 如果确实需要更改某个变量的值,可以使用var.下…
续前文: 中文代码示例之Programming in Scala学习笔记第二三章. 同样仅节选有意思的例程部分作演示之用. 源文档仍在: program-in-chinese/Programming_in_Scala_study_notes_zh 第六章 功能对象 此章的例子与之前的初步尝试将传统学科的内容程序/数据化有些共鸣, 以后的数学知识部分可以参考此实现. class 有理数(分子: Int, 分母: Int) { require(分母 != 0) private val 公约数 = 最…
上一节我们讲了Swift的基础部分,例如数据类型.运算符和控制流等,现在我们来看下Swift的函数和闭包 一.Swift函数 函数是一个完成独立任务的代码块,Swift中的函数不仅可以像C语言中的函数一样作为函数的参数和返回值,而且还支持嵌套,支持函数参数默认值.可变参数等. /* 1.在局部参数名前加上#来简写外部参数名(此时局部参数名和外部参数名相同) 2.如果使用默认参数,那么此参数名将默认作为外部参数名(此时局部参数名和外部参数名相同) 3.可变参数只能在最后一个参数,可变参数的类型是数…
以下主要记录的是看完scala in programming这本书functions and closures(第八章)后的要点总结. 1,函数可以存在的地方:函数方法,嵌套函数. 2,关于function literal和function value的区别,类似于java中class和object的区别. 3,关于"_"符号的作用(目前已知的两种用法): a,用在match的case中表示其他情况. b,参数的占位符 4,闭包的基本用法,函数定义可以带外部变量. 5,函数调用的形式:…
本章主要分析Scala中List的用法,List上可进行的操作,以及需要注意的地方. 一.List字面量 首先看几个List的示例. val fruit = List("apples", "oranges", "pears") val nums = List(1, 2, 3, 4) val diag3 = List( List(1, 0, 0), List(0, 1, 0), List(0, 0, 1) ) val empty = List()…
本章主要讲Scala中的类型参数化.本章主要分成三个部分,第一部分实现一个函数式队列的数据结构,第二部分实现该结构的内部细节,最后一个部分解释其中的关键知识点.接下来的实例中将该函数式队列命名为Queue. 一.函数式队列 函数式队列是一种具有以下三种操作方法的数据结构,并且这些操作都必须在常量时间内完成: head,返回该队列中的第一个元素 tail,返回除第一个元素之外的所有元素组成的新队列 enqueue,将新元素加入原有队列从而得到一个新队列 函数式队列不同于可变队列(mutable q…
本章主要分析case classes和模式匹配(pattern matching). 一.简单例子 接下来首先以一个包含case classes和模式匹配的例子来展开本章内容. 下面的例子中将模拟实现一个算术运算,这个算术运算可以基于变量和数字进行一些一元或二元的操作.其中有关数据类型,以及一元和二元操作的类型都定义在如下代码中. abstract class Expr case class Var(name: String) extends Expr case class Number(num…