scala基础备忘
声明一个变量

声明一个常量

显式指定类型

定义一个main函数
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println("hello scala")
}
}
定义一个普通函数
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println(hello("scala"))
}
def hello(name : String) : String = {
"hello " + name
}
}
函数不带参数时可以省略括号
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println(hello())
}
def hello() : String = {
"hello scala"
}
}
定义一个匿名函数
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println(add(,))
}
def add = (x : Int,y : Int) => x + y
}
把函数赋给一个常量
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println(add(,))
}
val add = (x : Int,y : Int) => x + y
}
柯里化
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println(add()())
}
def add(x : Int)(y : Int) = x + y
}
可变参数
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println(variable("hello","admln"))
}
def variable(s : String*) = {
s.foreach(x => println(x))
}
}
参数默认值
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
println(theDefault())
println(theDefault("scala"))
}
def theDefault(s : String="admln") : String= {
"hello " + s
}
}
判断表达式
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
val num = ;
val result = if(num > ) else
println(result)
}
}
while循环表达式
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
var (n,r) = (,)
while(n>) {
r = r + n
n = n -
}
println(r)
}
}
for循环表达式
package org.admln.scala
class HelloScala {
}
object HelloScala {
def main (args: Array[String]) {
//1<=10
for(i <- to ) {
println(i)
}
//1<10
for(i <- until ) {
println(i)
}
//只输出偶数
for(i <- to if i % == ) {
println(i)
}
}
}
创建一个类
package org.admln.scala
class HelloScala {
}
class Person {
var name : String = _
val age =
}
object MyPerson {
def main(args: Array[String]) {
val p = new Person
p.name = "admln"
println(p.name + " " + p.age)
}
}
使用私有属性(外部不能访问)
package org.admln.scala
class HelloScala {
}
class Person {
var name : String = _
val age =
private[this] val gender = "male"
}
object MyPerson {
def main(args: Array[String]) {
val p = new Person
p.name = "admln"
println(p.name + " " + p.age)
}
}
构造器
package org.admln.scala
class HelloScala {
}
class Person(var name : String,val age : Int){
println("main constructor")
var gender : String = _
def this(name : String,age : Int,gender : String) {
this(name,age)
this.gender = gender
}
}
object MyPerson {
def main(args: Array[String]) {
val p = new Person("admln",,"male")
println(p.name + " " + p.age)
}
}
继承
package org.admln.scala
class HelloScala {
}
class Person(var name : String,val age : Int){
println("main constructor")
var gender : String = _
def this(name : String,age : Int,gender : String) {
this(name,age)
this.gender = gender
}
}
class Student(name : String,age : Int,val major : String) extends Person(name,age) {
println("subclass is person,major is" + major)
}
object MyPerson {
def main(args: Array[String]) {
val s = new Student("admln",,"spark")
}
}
覆写父类的方法和字段
package org.admln.scala
class HelloScala {
}
class Person(var name : String,val age : Int){
println("main constructor")
var gender : String = "mail"
def this(name : String,age : Int,gender : String) {
this(name,age)
this.gender = gender
}
val school = "usa"
}
class Student(name : String,age : Int,val major : String) extends Person(name,age) {
println("subclass is person,major is" + major)
override def toString = "override method"
override val school = "china"
}
object MyPerson {
def main(args: Array[String]) {
val s = new Student("admln",,"spark")
println(s.toString)
println(s.gender)
}
}
抽象类
package org.admln.scala
class HelloScala {
}
abstract class Person {
def speak
var name : String
val age : Int
}
class Worker extends Person {
def speak {
println("speak")
}
var name = "admln"
val age =
}
object HelloScala extends App {
val worker = new Worker
worker.speak
println(worker.name + " " + worker.age)
}
App是trait的子类,内部实现了main方法并管理我们写的代码
trait
trait中可以带有实现的方法,也可以带有抽象方法,使用trait的方式是使用with混入类中
package org.admln.scala
class UseTrait {
}
trait Logger {
def log(msg : String) {
println("log: " + msg)
}
}
class ConcreteLogger extends Logger {
def concreteLog {
log("It's admln")
}
}
object UseTrait {
def main(args: Array[String]) {
val logger = new ConcreteLogger
logger.concreteLog
}
}
覆写父类的抽象方法(不用使用override关键字)
package org.admln.scala
class UseTrait {
}
trait Logger {
def log(msg : String)
}
trait ConcreteLogger extends Logger {
def log(msg : String) {
println("log: " + msg)
}
}
class Test extends ConcreteLogger {
def test {
log("It's admln")
}
}
object UseTrait {
def main(args: Array[String]) {
val test = new Test
test.test
}
}
如果子trait覆写父trait已经实现的方法,就必须使用override关键字
package org.admln.scala
class UseTrait {
}
trait Logger {
def log(msg : String) {
println("log: " + msg)
}
}
trait ConcreteLogger extends Logger {
override def log(msg : String) {
println(" child log: " + msg)
}
}
class Test extends ConcreteLogger {
def test {
log("It's admln")
}
}
object UseTrait {
def main(args: Array[String]) {
val test = new Test
test.test
}
}
在对象中混入trait
package org.admln.scala
class UseTrait {
}
trait Logger {
def log(msg : String) {
println("log: " + msg)
}
}
trait ConcreteLogger extends Logger {
override def log(msg : String) {
println(" child log: " + msg)
}
}
class Test extends Logger{
def test {
log("It's admln")
}
}
object UseTrait {
def main(args: Array[String]) {
val test = new Test with ConcreteLogger
test.test
}
}
apply方法和静态方法
package org.admln.scala
class UsageOfApply {
}
class ApplyTest {
def test {
println("test")
}
}
object ApplyTest {
def apply() = new ApplyTest
def staticTest {
println("It's static method")
}
}
object UsageOfApply {
def main(args: Array[String]) {
ApplyTest.staticTest
val at = ApplyTest()
at.test
}
}
object 中的方法和属性都是静态的,所以是单例对象的理想载体
object本身就是一个单例对象
函数式编程,把运算过程尽量写成一系列嵌套的函数调用
函数的定义
def 函数名称(变量名称 : 变量类型) : 函数返回值类型 = { 函数体 }
如果函数仅包含一条语句,那么花括号可以选择不写

值函数

匿名函数
(参数名称 : 参数类型) => 表达式
把匿名函数赋值给一个常量

闭包
代码与用到的非局部变量的混合
闭包 = 代码 + 非局部变量

高阶函数map函数

下划线代表数组中的每一个元素
高阶函数filter函数

高阶函数reduce函数

scala中的集合:List、Set、Tuple、Map
它们内部都是以apply方式来完成实例化的
List和Set

和java中的Set一样,里面不会存在相同元素
Tuple

下标从1开始
Map

Option
Option代表一个可有可无的值,有两个子类:Some和None

zip操作

partition操作

flatten操作

flatmap操作:map和flatten的结合

scala基础备忘的更多相关文章
- UITextView -- 基础备忘
UITextView 这篇文章只涉及到基本的使用,日后会写一些关于结合TextKit的备忘 基本属性 let screenSize = UIScreen.mainScreen().bounds.siz ...
- Java Socket基础[备忘]
1.服务端----Server.java import javax.swing.*; import java.io.*; import java.net.*; import java.awt.*; i ...
- ajax基础------备忘
1:register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- javaweb基础备忘
Request对象的主要方法有哪些 setAttribute(String name,Object):设置名字为name的request 的参数值 getAttribute(String name): ...
- Linux基础之常用基本命令备忘
Linux基础之常用基本命令备忘 PWD 查询当前所在Linux上的位置 / 根目录 CD(change directory)切换目录 语法 CD /(注意添加空格) LS ...
- Nmap备忘单:从探索到漏洞利用(Part 4)
这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...
- HTML5终极备忘大全
二.文字备忘之标签 HTML5中新增的标签 <article> 定义文章 <aside> 定义页面内容旁边的内容 <audio> 定义声音内容 <canvas ...
- [转] HTML5终极备忘大全(图片版+文字版)---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1544 一.前言兼图片 ...
- Table view 备忘
Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以 ...
随机推荐
- 阿里云开放服务oss的api
http://imgs-storage.cdn.aliyuncs.com/help/oss/OSS_API_20131015.pdf?spm=5176.383663.5.23.JQjiIK&f ...
- 触控发布《Cocos开发者平台白皮书》
Cocos 2014 开发者大会(秋季)组委会今天正式发布了<Cocos开发者平台白皮书>,GameRes游资网得到Cocos官方授权发布该白皮书电子版. 白皮书主要内容包括对行业的趋势解 ...
- linux top命令VIRT,RES,SHR,DATA的含义
VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而 ...
- python报错ordinal not in range(128)
python编码问题:'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128) 这种问题有三种原因: ...
- UVaLive 6608 Cabin Baggage (水题)
题意:给定四个数代表长宽高和重,问你是不是满足下面条件,长不高于56,宽不宽于45,高不高于25,或者总和不大于125,并且重量不高于7. 析:判断输出就好,注意这个题是或,不要想错了. 代码如下: ...
- OC:通讯录实战
实战(使用OC的知识制作一个简易通讯录) //语法糖.笑笑语法 // NSString * string = [NSString stringWithFormat:@"string" ...
- Log设计
Log设计 http://biancheng.dnbcw.info/net/380312.html http://blog.csdn.net/anyqu/article/details/7937378 ...
- JavaScript设计模式 -- 读书笔记
JavaScript设计模式 一. 设计模式 一个模式就是一个可重用的方案: 有效的解决方法.易重用.善于表达该解决方案: 未通过"模式特性"测试的模式称为模式原型: 三规则:适用 ...
- plsql配置连接远程数据库
一.首先安装PL/SQL Developer 下载地址:https://yunpan.cn/cM3njKpfK8MnT 访问密码 996a 二.再安装instantclient_11_2 下载地址:h ...
- SCROLLINFO结构体中fMask和nPage的理解
还是VC++中有关显示图像的问题. 我们在显示一幅比较大的图像时,要使用带标准滚动条的对话框.涉及对滚动条的操作就不得不提SCROLLINFO这个结构体.只看单词意思就这道这个结构体要储存滚动条的一些 ...