19. 記法の簡略化
例:クラス定義(Java)
public class Foo {
private String name;
public Foo(String name) {
this.name = name
}
public void setName(String name) {
this.name = name
}
public String name() {
return name
}
}
23. Mix-in
Traitの例
trait HelloTrait {
val msg = quot;Hello, World!quot;
def say {
println(msg)
}
}
class SimpleClass extends HelloTrait
new SimpleClass().say
24. Mix-Inの正体
コンパイラは、このようなバイトコードを生成
class A extends B { trait B {
def method {…
class A implements B { 実装 interface B {
public void method();
public void method { abstract class B$class {
B$class.method(); public static void method {
} 委譲
println(“hello, world!”);
}
31. 高階関数・匿名関数
関数を返す関数や、関数を引数に取る関数
クロージャ、カリー化の基盤になる
無名関数も作ることが出来る
例:有名なやつ
abstract class List[A] { ...
def map[B](f: A => B): List[B] = this match {
case Nil => this
case x :: xs => f(x) :: xs.map(f)
}
xs map (x => x * x)
41. Actorモデル
動作モデル send async messages Actor
M address
create
M address
Actor 共有領域は持たない
必要な情報はメッセージで
M
M
Actor
address
send async messages
なんかこんなかんじ
詳しく知りたければWikipediaにリンクされてる論文読んで
scala.actorsパッケージでこのモデルをサポート