Scala断言

断言:提供了一组断言函数以用作在代码中记录和动态检查不变量的方式。

import scala.Predef._

def addNaturals(nats: List[Int]): Int = {
    // assert(nats forall (_ >= 0), "List contains negative numbers")
    require(nats forall (_ >= 0), "List contains negative numbers")
    nats.foldLeft(0)(_ + _)
          } ensuring (_ >= 0) // 这里的"_"是函数的返回值

scala> addNaturals(List(-1, -2, 2, 3))
java.lang.IllegalArgumentException: requirement failed: List contains negative numbers
  at scala.Predef$.require(Predef.scala:224)
  at addNaturals(<console>:50)
  ... 56 elided

scala> addNaturals(List(1, 2, 3, 4, 10))
res15: Int = 20
时间: 2024-10-19 02:47:29

Scala断言的相关文章

Scala 一切皆为函数 第二周视频笔记

Lecture 2.2 Curring Motivation 回顾 sum(f, a,b) 中如何使用不同的f来实现sum,铺垫匿名函数概念 Fuctions returning Functions 函数1可以是另外一个函数2的返回, 这里面蕴含一个重要思想: 在函数1的体内使用函数2时,函数2本身作为函数1的参数的这个效果在函数2的代码不再体现, 即函数2比函数1少去了一个自身的参数,而省去的根本原因在于函数2还可以调用函数2本身 也就是之前为什么需要学习递归思想的原因 Stepwise Ap

Coursera公开课Functional Programming Principles in Scala习题解答:Week 2

引言 OK.时间很快又过去了一周,第一周有五一假期所以感觉时间绰绰有余,这周中间没有假期只能靠晚上加周末的时间来消化,其实还是有点紧张呢!后来发现每堂课的视频还有对应的课件(Slide).字幕(subtitles)可以下载,这样下载视频学习和在线学习就只差课程中间的Exercise了 Week 2主要讲函数,函数在Scala里是first-class citizen,可以在任意域内出现,这门课其实也是在借Scala来讲函数式编程原理.好了,不多说,进入习题解析. 这周的作业主要是使用函数来表示一

Scala 中的函数式编程基础(三)

主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. 3. Data and Abstraction 3.1 Class Hierarchies 这一集字幕不同步-,-,听得有点费力! 类的概念和其他语言里面很相似,基类,子类,父类啥的叫法差不多.在 Scala 中,所有用户自定义的类都是另外一个类的子类,如果没有显式给定父类,java 里面默认继承 java.

scala的传名参数

scala如果你想实现像if ,while等类似的控制结构,根本没有值要传入花括号{}直接的代码里.要怎么实现. 比如说,我们要实现一个断言的控制结构,myAssert(), myAssert函数参考自带参数和一个标示变量,如果标示位为false,则什么都不做,如果为true则进行正常判断. 下面是一种合理的实现: val assertionEnable = true def myAssert( predicate: () => Boolean) = if(assertionEnable &

scala 宏

Scala开发团队正在将实验版宏指令加入到即将发行的2.10版中.Scala宏指令提供了编译时元编程的高级形式.Scala宏网站描述道: “宏指令显著简化了代码分析和代码生成,这使得它们成为处理大量现实用例的一种可选工具.传统上涉及编写和维护样板的场合可用宏以简单且易维护的方式实现.因此我们认为宏对于Scala编程语言是一项非常有价值的资产.” Scala的宏指令允许开发者创建方法时以语法树转化的形式实现.这些是标准方法的定义,其在编译期间被显式地转换.举一个简单的例子,如assert方法: i

【Scala】Scala的Predef对象

隐式引用(Implicit Import) Scala会自己主动为每一个程序加上几个隐式引用,就像Java程序会自己主动加上java.lang包一样. Scala中.下面三个包的内容会隐式引用到每一个程序上.所不同的是.Scala还会隐式加进对Predef的引用.这极慷慨便了程序猿的工作. import java.lang._ // in JVM projects, or system namespace in .NET import scala._ // everything in the s

Scala学习笔记:重要语法特性

1.变量声明 Scala 有两种变量, val 和 var  val的值声明后不可变,var可变 val msg: String = "Hello yet again, world!" 或者类型推断 val msg = "Hello, world!" 2.函数定义 如果函数仅由一个句子组成,你可以可选地不写大括号. def max2(x: Int, y: Int) = if (x > y) x else y 3.for循环 打印每一个命令行参数的方法是: ar

Go -- type 和断言 interface{}转换

摘要 类型转换在程序设计中都是不可避免的问题.当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关 注这方面的问题.但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事.我之所以说通常需要手动转换,是 因为interface类型作为一个特例,会有不同的处理方式. 类型转换在程序设计中都是不可避免的问题.当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要 去关注这方面的问题.但是golang中的类型匹配是很严格的,不同的类型之间通常需要

Scala总结

===概述 scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言. scala是纯粹的面向对象的语言.java虽然是面向对象的语言,但是它不是纯粹的,因为java的基本数据类型不是类,并且在java中还有静态成员变量和静态方法.相反,scala是纯粹面向对象的,每个值都是对象,每个操作都是方法调用. scala也是一个成熟的函数式语言.函数式编程有两个指导思想:①函数是头等值,也就是说函数也是值,并且和其他类型(如整数.字符串等)