Skip to content

Instantly share code, notes, and snippets.

@freewind
freewind / fromScalaConsole.scala
Last active August 29, 2015 14:02
Cake pattern example
case class User(username:String, password: String)
trait UserRepositoryComponent {
val userRepository: UserRepository
class UserRepository {
def authenticate(user: User): User = {
println("authenticating user: " + user)
user
}
@freewind
freewind / di.scala
Created June 19, 2014 14:54
Is this code "Dependency injected"
case class User(username:String, password: String)
class UserRepository {
def authenticate(user: User): User = {
println("authenticating user: " + user)
user
}
def create(user: User) = println("creating user: " + user)
def delete(user: User) = println("deleting user: " + user)
}
#!/bin/sh
# one way (older scala version will be installed)
# sudo apt-get install scala
#2nd way
sudo apt-get remove scala-library scala
wget http://www.scala-lang.org/files/archive/scala-2.11.1.deb
sudo dpkg -i scala-2.11.1.deb
sudo apt-get update
@freewind
freewind / SameMethod.scala
Created June 26, 2014 15:09
Same method in different traits
//
// The method `hello` in trait `A` and `B` are exactly same
//
object SameMethodInDifferentTraits {
trait A {
def hello()
}
@freewind
freewind / TypesOfCompanion.scala
Created June 26, 2014 15:15
class User & object User
object TypesOfCompanion {
class User
object User
def helloClass(user: User) = println(user)
def helloObject(user: User.type) = println(user)
@freewind
freewind / arduino
Last active August 29, 2015 14:03
Read the signal from 4, then write to led
int led = 13;
int x = 4;
void setup() {
pinMode(led, OUTPUT);
pinMode(x, INPUT);
}
void loop() {
int sta = digitalRead(x);
@freewind
freewind / curry.scala
Created June 29, 2014 11:05
Curry与推断
// curry的一个意义是: 方便scala根据第一组参数的内容,推断后面的类型
// scala采用基于流的局部推断,只会从第一组参数中获取类型信息,再用到其它组参数里
// 下面只有sort2不用写Int类型
def sort[T](f: (T,T)=>Boolean)(list:List[T]):List[T] = list
sort[Int]((x,y)=>true)(List(1,2,3))
def sort2[T](list:List[T])(f: (T,T)=>Boolean):List[T] = list
// curry的一个意义是: 方便scala根据第一组参数的内容,推断后面的类型
// scala采用基于流的局部推断,只会从第一组参数中获取类型信息,再用到其它组参数里
// 下面只有sort2不用写Int类型
def sort[T](f: (T,T)=>Boolean)(list:List[T]):List[T] = list
sort[Int]((x,y)=>true)(List(1,2,3))
def sort2[T](list:List[T])(f: (T,T)=>Boolean):List[T] = list
@freewind
freewind / fromScalaConsole.scala
Created June 29, 2014 11:06
use map to compose functions
def double(number:Int) = 2*number
def add10(number:Int) = 10 + number
def negative(number:Int) = -1 * number
def myconvert(n:Int) = Some(n).map(double).map(add10).map(negative).get
myconvert(5)
@freewind
freewind / fromScalaConsole.scala
Created June 29, 2014 11:07
use `andThen` to compose functions
import scala.io.Source.stdin
object App {
def main(args: Array[String]) {
stdin.getLines foreach { line =>
println(myconvert(line.toInt))
}
}
val double = (number:Int) => 2*number