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(1,3))
  }

  def add = (x : Int,y : Int) => x + y
}

把函数赋给一个常量

package org.admln.scala

class HelloScala {

}
object HelloScala {
  def main (args: Array[String]) {
     println(add(1,3))
  }

  val add = (x : Int,y : Int) => x + y
}

柯里化

package org.admln.scala

class HelloScala {

}
object HelloScala {
  def main (args: Array[String]) {
     println(add(1)(2))
  }

  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 = 5;
    val result = if(num > 0) 1 else 0
    println(result)
  }
}

while循环表达式

package org.admln.scala

class HelloScala {

}
object HelloScala {
  def main (args: Array[String]) {
    var (n,r) = (10,0)
    while(n>0) {
      r = r + n
      n = n - 1
    }
    println(r)
  }
}

for循环表达式

package org.admln.scala

class HelloScala {

}
object HelloScala {
  def main (args: Array[String]) {
    //1<=10
    for(i <- 1 to 10) {
      println(i)
    }
    //1<10
    for(i <- 1 until 10) {
      println(i)
    }   //只输出偶数
    for(i <- 1 to 10 if i % 2 == 0 ) {
      println(i)
    }
  }
}

创建一个类

package org.admln.scala

class HelloScala {

}
class Person {
  var name : String =  _
  val age = 24
}
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 = 24
  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",24,"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",24,"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",24,"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 = 24
}
object HelloScala extends App {
  val worker = new Worker
  worker.speak
  println(worker.name + " " + worker.age)
}

App是trait的子类,内部实现了main方法并管理我们写的代码

trait

时间: 2024-10-11 21:23:14

scala基础备忘的相关文章

UITextView -- 基础备忘

UITextView 这篇文章只涉及到基本的使用,日后会写一些关于结合TextKit的备忘 基本属性 let screenSize = UIScreen.mainScreen().bounds.size let textView = UITextView(frame: CGRectMake(0, 20, screenSize.width, 200)) textView.font = UIFont.systemFontOfSize(20) textView.selectable = false t

ajax基础------备忘

1:register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dt

【基础备忘】 二叉树前序、中序、后序遍历相互求法

转自:http://www.cnblogs.com/fzhe/archive/2013/01/07/2849040.html 今天来总结下二叉树前序.中序.后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明. 首先,我们看看前序.中序.后序遍历的特性: 前序遍历:     1.访问根节点     2.前序遍历左子树     3.前序遍历右子树 中序遍历:     1.中序遍历左子树     2

基础备忘

1.虚函数不能被内联.   因为“内联”意味着“在编译时刻用被调用函数的函数体来代替被调用的函数”.但是“虚函数”意味着“运行时刻决定被调用的是哪一个函数”. 2.多重继承一般要求基类为虚基类.   不是虚基类的话,如果一个派生类有多于一条通向基类的继承路径,基类的数据成员会被复制到每一个继承类的对象里,继承类与基类间的每条路径都有一个拷贝.把基类定义为虚基类则可以消除这种重复.   class A {};   class B : virtual public A {};   class C :

【基础备忘】基数排序

转自:http://www.cnblogs.com/kaituorensheng/archive/2013/02/23/2923877.html 基本思想 假设数序列中小于元素a的个数为n,则直接把a放到第n+1个位置上.当存在几个相同的元素时要做适当的调整,因为不能把所有的元素放到同一个位置上.计数排序假设输入的元素都是0到k之间的整数. 回到顶部 参考代码 #include <stdio.h> void COUNTINGSORT(int *A, int *B, int array_size

【基础备忘】JSON与XML的区别比较

转自:http://www.cnblogs.com/SanMaoSpace/p/3139186.html 1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准.XML是标准通

【基础备忘】求sizeof struct

转自牛客网 一: 1.什么是内存对齐 假设我们同时声明两个变量: char a; short b; 用&(取地址符号)观察变量a, b的地址的话,我们会发现(以16位CPU为例): 如果a的地址是0x0000,那么b的地址将会是0x0002或者是0x0004. 那么就出现这样一个问题:0x0001这个地址没有被使用,那它干什么去了? 答案就是它确实没被使用. 因为CPU每次都是从以2字节(16位CPU)或是4字节(32位CPU)的整数倍的内存地址中读进数据的.如果变量b的地址是0x0001的话,

R语言基础备忘 plot()详解

plot是R中的基本画图工具,直接plot(x),x为一个数据集,就能画出图,soeasy!但是细节往往制胜的关键.所以就详细来看下plot的所有可设置参数及参数设置方法. 下面讲到的图形参数,是graphic包中的常见参数,graphic不同图形方法中,这些参数都是相同的. type图形的类型 "p"点图 "l"线图 "b"点线图,线不穿过点 "c"虚线图 "o"点线图,线穿过点 "h"

linux网络基础(备忘)

1.如何让自己活得久一点,程序员 http://www.yeeyan.com/articles/view/31069/10175 在以太网的世界里,除了要网卡,还要有网线升级以及线路之间的交换器都要升级到相应的传输速率水平.ji 1.信号衰减的问题: 电子信号是存在衰减的,当长度达到100米时,就会很有可能出现问题.还有1.网线折的太严重,比如被门挤到,自行压制水晶头,缠绕度不够,风吹日晒的线路老化都会让信号衰减以及链接质量的问题:比如我之前遇到的一会链接上,一会连接不上,就是水晶头的制作有问题