Scala 学习笔记(五)
def main(args : Array[String]): Unit =
{
def add(x:Int,y:Int):Int =
{
return x+y;
} def subtract:(Int,Int)=>Int = (x,y)=>x-y; val multiply = (x:Int,y:Int)=>x*y; val division :(Int,Int)=>Float = (x,y)=>x/y; def sum:Int=>Int = i => i match
{
case 1 => 1;
case n => n + sum(i-1);
} def summ(i:Int):Int= i match
{
case 1 => 1;
case n => n + summ(n-1);
} lazy val fact:Int=>Int =
{
case 1 => 1;
case n => n*fact(n-1);
} lazy val summary:Int=>Int = (_:Int) match
{
case 1 => 1;
case n => n + summary(n-1);
} println(summ(100)); }
object Main{
def main(args:Array[String]):Unit=
{
object W
{
type S = String;
type D = Tuple2[S,S];
def say(x:D):S= s"say ${x _1},${x _2}";
}
implicit def MyStr(s:String)=new
{
def ++:(x:Char) = x + s;
}
val ss = 'c' ++: "hello"; // 相当于 "hello".++:('c')
//但是如果写成 "hello" ++: 'c' 则提升 Char 没有 ++: 方法
Predef println ss
}
}
implicit def XString(s:String)= new
{
def unary_- = s.reverse;
def ? = s.length;
} println(-"hello");//olleh
println( "hello"? );//5
在基类中将基本的操作(开\关\异常处理)都处理好,在子类中只定义功能操作.
package exp; import java.io.PrintWriter object Main
{
def main(args : Array[String]): Unit =
{
def fileOps = new MyFileOps;
fileOps.opPw;
} } class MyFileOps extends FileOps("/home/wengmj/1.txt")
{
override def pwOp(writer:PrintWriter):Unit=writer.println("hello world");
} abstract class FileOps(path:String)
{
def pwOp(writer:PrintWriter):Unit; def opPw():Unit=
{
val writer = new PrintWriter(path);
try
{
this.pwOp(writer);
}
catch
{
case _:Throwable => println("unknow exception");
}
finally
{
writer.close
}
}
}
编写新的控制结构:借贷模式,柯里化
package exp
import java.sql.SQLException object Main {
def main(args: Array[String]): Unit = { val x = withDB(new DB()) {//这里本应该用小括号的用大括号是函数只有有个参数时用大括号更优美
db =>
{//这个大括号是定义函数必须的
db.prepareStatement("update products set product_name='aaa' where product_id=123");
db.update
}
}
} def withDB(db: DB)(op: DB => Any): Any =
{
var r: Any = null;
try {
db.open
r = op(db);
db.close
} catch {
case e: Exception => println(e.getMessage);
} finally {
db.close
}
r;
}
}
class DB {
@throws(classOf[SQLException])
def prepareStatement(sql: String) = Unit; @throws(classOf[SQLException])
def open() = Unit; def close(): Unit = Unit; @throws(classOf[SQLException])
def update(): Boolean = false;
}
Scala 学习笔记(五)的更多相关文章
- [Scala]Scala学习笔记五 Object
1. 单例对象 Scala没有静态方法或静态字段,可以使用object来达到这个目的,对象定义了某个类的单个实例: object Account{ private var lastNumber = 0 ...
- scala 学习笔记五 foreach, map, reduce
例子 val v = Vector(,,,) ) println(s) //输出:Vector(2, 4, 6, 8) val v2 = Vector(,,,) var v3 = v2.reduce( ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍
python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...
随机推荐
- [JAVA] 面向对象编程OOP Note
面向对象编程OOP Note OOP五个基本特性1. 万物皆对象.2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的.3. 每个对象都有自己的由其他对象所构成的存储.4. 每个对象都拥有其类型 ...
- libevent源码分析:listener
listener是libevent封装的一个方便生成监听者的一组结构和函数,其中包括: /* * Copyright (c) 2000-2007 Niels Provos <provos@cit ...
- 如何输出function执行的语句
SQL> set serveroutput on;SQL> exec dbms_output.put_line(1); set serveroutput on size ...
- Nginx添加到windows服务
在windows平台,把Nginx注册到服务,又可以启动.停止和重启的方法,网上并没找到好的办法. 既然如此,唯有自己写程序实现了 使用C#进行编写,有兴趣的可以下载源码自己改:源码下载(2016-1 ...
- C++Primer 5th 练习 12.19
这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C+ ...
- C++ 字符编码转换类
记录一下C++ 编码转换的函数: #pragma once #include "afx.h" #define DEFAULT_CODE 0 #define CHINESE_SIMP ...
- 老王讲自制RPC框架.(四.序列化与反序列化)
#(序列化) 在实际的框架中,真正影响效率的就是数据的传输方式,以及传输的准备,或者说是tcp与http,序列化.当然要想提高整个框架的效率,需要采用一种高效的序列化 框架比如流行的protostuf ...
- java ZipOutputStream压缩文件,ZipInputStream解压缩
java中实现zip的压缩与解压缩.java自带的 能实现的功能比较有限. 本程序功能:实现简单的压缩和解压缩,压缩文件夹下的所有文件(文件过滤的话需要对File进一步细节处理). 对中文的支持需要使 ...
- nginx.conf 解释
http://snapshot.sogoucdn.com/websnapshot?ie=utf8&url=http%3A%2F%2Fwww.cszhi.com%2F20120513%2Fngi ...
- Java源文件编译成功但是运行时加载不到文件
最近系统重装了一些,Java等环境变量都需要重新配置,配置好以后编写了一个Java源文件编译了一下,通过Javac编译源文件,编译成功,但是再通过Java运行时没找到报出找不到加载文件或者加载文件不存 ...