C#有using 控制结构 如下:
using (TextReader textReader = new StreamReader(filename))
{
return textReader.ReadLine();
}
用scala实现如下
object Control {
def using[A <: {def close(): Unit}, B](param: A)(f: A => B): B =
try {
f(param)
} finally {
param.close()
}
import scala.collection.mutable.ListBuffer
def bmap[T](test: => Boolean)(block: => T): List[T] = {
val ret = new ListBuffer[T]
while(test) ret += block
ret.toList
}
}
用java实现找所有Person 的功能
import java.sql.*;
import java.util.ArrayList;
public class Person {
private String name;
private int age;
private boolean valid;
public Person(String n, int a, boolean v) {
name = n;
age = a;
valid = v;
}
public static ArrayList<Person> findPeople(Connection conn)
throws SQLException {
Statement st = conn.createStatement();
try {
ResultSet rs = st.executeQuery("SELECT * FROM person");
try {
ArrayList<Person> ret = new ArrayList<Person>();
while (rs.next()) {
ret.add(new Person(rs.getString("name"),
rs.getInt("age"),
rs.getBoolean("valid")));
}
return ret;
} finally {
rs.close();
}
} finally {
st.close();
}
}
}
同样的功能用刚才定义的自定义控制结构实现
case class Person(name: String, age: Int, valid: Boolean)
object Person {
import Control._
import java.sql._
def findPeople(conn: Connection): List[Person] =
using(conn.createStatement){st =>
using (st.executeQuery("SELECT * FROM person")){rs =>
bmap(rs.next){
new Person(rs.getString("name"), rs.getInt("age"), rs.getBoolean("valid"))
}
}
}
}
scala有强大的dsl能力,值得期待
分享到:
- 2009-09-02 17:12
- 浏览 1169
- 评论(4)
- 论坛回复 / 浏览 (4 / 2381)
- 查看更多
相关推荐
1. JSON解析器:用于将JSON字符串解析成Scala数据结构。 2. JSON生成器:将Scala对象转换成JSON格式的字符串。 3. 类型映射:自动将JSON数据映射到Scala类实例,反之亦然。 4. 错误处理:提供优雅的错误处理机制,如...
3. `js` 目录 - 可能包含自定义的JavaScript代码,例如用Scala生成的数据或逻辑,这些代码可能与impress.js库一起工作,以实现特定的交互效果。 4. `images` 或 `media` 目录 - 用于存储演示文稿中使用的图片、图标...
Scala还引入了模式匹配,这是一种强大的控制流构造,能够处理复杂的数据结构。模式匹配可以用于解构数据,例如在处理列表、元组或者自定义案例类时。在样本代码中,我们可以期待看到如何使用模式匹配进行条件判断和...
- 如何使用Scala的高阶函数来创建自定义的控制结构。 - 实践案例分析。 10. **Composition and Inheritance(组合与继承)**: - 组合(composition)和继承(inheritance)之间的权衡。 - Scala中如何更好地利用...
7. **模式匹配**:Scala的模式匹配功能强大,可以用于解构复杂数据结构,如列表、元组或自定义类。它也常用于case类和case对象的匹配。 8. **类型类**:Scala中的类型类是一种设计模式,允许在运行时添加新行为到已...
- **命令式控制结构**:介绍了Scala中的命令式编程元素。 - **示例:离散事件模拟**:通过一个具体的例子来展示如何在Scala中实现离散事件模拟。 - **总结**:对本章内容进行了总结。 #### 十二、使用流进行计算 这...
本课程围绕 Scala 后端展开,重点介绍了变量、控制结构、LeetCode 问题解决以及简单的单行计算器的实现。 首先,我们来详细讨论 Scala 中的变量。在 Scala 中,变量分为两种类型:val(不可变变量)和 var(可变...
异常处理(exception handling),Scala的异常处理机制与Java类似,但提供了更高级的控制和自定义异常处理的能力;文件和网络操作(file and network operations),Scala可以简洁地处理文件的读写以及网络编程任务...
通过Monad,开发者可以更好地控制这些流程,避免回调地狱,并实现更清晰的代码结构。 该项目的"Android-Monad-master"文件夹可能包含以下内容: 1. **源码**:项目的Java或Kotlin源代码,展示了如何在Android环境...
cron4s为Scala开发者提供了一种优雅的方式来处理CRON表达式,无论是在服务器端的JVM环境中,还是在客户端的JavaScript环境中。它的跨平台性、类型安全性和函数式接口,使得定时任务的管理变得简单而高效。通过理解和...
《Scala with Cats》这本书主要探讨了Scala编程语言中与函数式编程相关的概念,特别是Cats库的使用。书中特别强调了Monads这一重要的抽象概念,它们在Scala中扮演着核心角色,很多程序员即使不知道其名称,也会在...
《Scala with Cats》是关于Scala函数式编程的深入探讨,它由Noel Welsh和Dave Gurnell编著,...这本书为有Scala基础的程序员提供了一个高级话题的引入,帮助他们理解和使用函数式编程概念来编写更加优雅、简洁的代码。
模式匹配是Scala中的另一个强大工具,它可以用于解构复杂数据结构,如元组、列表和自定义案例类。通过模式匹配,我们可以优雅地处理多种情况,而无需冗长的if-else语句。 **函数式数据结构** Scala提供了许多函数...
8. **控制结构**:Scala不提供`break`和`continue`,但通过`breakable`块可以模拟类似功能。 9. **函数和方法**:函数是独立的代码单元,方法是类的一部分。Scala中的函数可以嵌套定义,没有重载和重写,但方法可以...
- **控制流结构**:Kotlin提供了多种控制流结构,如`if`、`when`、`for`和`while`循环。 #### 类和对象 - **类定义**:Kotlin中的类定义简单直观,支持继承和接口实现。 - **构造函数**:Kotlin支持主构造函数和次...
- **习惯用法**:Kotlin 引入了一些新的习惯用法,如惰性初始化、范围表达式等,这些特性可以帮助开发者写出更加优雅的代码。 - **编码规范**:为了保持代码的一致性和可维护性,Kotlin 提供了一套编码规范指南。 - ...
- **控制流**:Kotlin支持常见的控制结构,如`if`、`when`、`for`、`while`等,并且引入了一些改进,如将`when`表达式作为条件判断和多分支选择的组合使用。 - **返回和跳转**:Kotlin提供了多种方式来控制流程的...
- **属性和字段**:属性在 Kotlin 中非常重要,支持读写分离,并可以通过 getter 和 setter 方法自定义访问逻辑。 - **接口**:Kotlin 的接口可以定义方法和属性,类似于 Java 8 的接口特性。 - **可见性修饰符**:...
《Akka流:深入解析源码》 ...通过深入理解和分析"akkaflow-源码.zip",不仅可以掌握Akka流的基本工作原理,还可以学习到高级的并发控制和数据处理技巧,这对于提升你的Scala和分布式系统开发能力具有极大帮助。
JSON DSL(领域特定语言)是一...通过选择不同的解释器,开发者可以灵活地控制JSON的处理方式,如生成字符串、写入文件或其他自定义行为。无标签最终样式不仅提高了代码的可读性和可维护性,还降低了DSL实现的复杂度。