Scala
Scala勉強会第9回 in 渋谷で発表してきました。 まだScalaでがりがりコード書けないので、外の言語からみたScalaの話をしました。 Scala lang evolutionView more presentations from faithandbrave.
このあいだ id:kmizushima さんに、Scala 3.0(メジャーアップデート時)に予定されてる機能って何かあるのか聞いて、その後忘れてさっき思い出したのでメモ代わりに書いときます。 何やら、メソッドのパラメータリストをタプルとして扱えるようにする機構が予…
Structual Subtypingで、継承関係がないdrawというメソッドを持っているクラスをなんでも入れられるリスト。 class Rectangle { def draw = println("Rectangle") } class Circle { def draw = println("Circle") } object Main { def main(args: Array[Stri…
scala.concurrent.ops以下に、Concurrentな便利メソッドがいくつか定義されています。 ここではその代表的な例としてspawnとfutureを紹介します。 まず、spawn。 これは戻り値のいらない処理をバックグラウンドで動かすのに使います。 import scala.concurre…
ScalaにもEitherあったんだな、と。 object Main { def foo(x : Int) : Either[String, Int] = x match { case 0 => Left("invalid arguments!") case _ => Right(x) } def result(a : Either[String, Int]) : Unit = a match { case Left(msg) => println("…
ScalaではLoan Patternというので、スコープを抜けた際の自動リソース解放を行うのが一般的(?)だったようですが、現在scala-armというのが開発中のようですね。http://github.com/jsuereth/scala-arm/wiki/basic-usageリソース管理はパターンとしてユーザー…
まだ途中のコード。 これは、真面目にやるならcaseクラスを外で定義せずにAtomicMapクラス内部で自己完結するようにしないと、ジェネリックに書けない(書けたとしても実行時エラーがひどいことになりそう)んじゃないかと思うので、あとで考える。 あと、Stop…
まず文字列によるメッセージ送信。 import scala.actors.Actor import scala.actors.Actor._ class X extends Actor { def act() = { react { case "test" => println("received test") case _ => println("received unknown message") } } } object Main ex…
パーサーを指定回数適用するrepNと、最後の"."をoptionalにするだけでわりと簡単に書けました。 import scala.util.parsing.combinator.syntactical._ object Main extends StandardTokenParsers { lexical.delimiters ++= List(".") def parse : Parser[Lis…
ScalaのParser Combinatorsで遊んでます。 Boost.Spirit.Qiのときにもやった"(123)"というカッコに囲まれた値を取り出す処理を書きます。 import scala.util.parsing.combinator.syntactical._ object Main extends StandardTokenParsers { lexical.delimite…
うなの日記 - for文を使った配列の操作 1.全ての要素に対して処理を行う(foreach) val ls = List(0, 1, 2) for (i <- ls) println(i) 0 1 2 2.条件抽出(filter) val ls = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) for (i <- ls if i % 2 == 0) println(i) 0 2 4 …
全てのクラスのスーパークラスは Anyobject はシングルトンオブジェクトのためのキーワード
パターンマッチングとかよくわかっていませんが、 Scala 勉強会でおもしろかったネタをメモ Pair を _1 と _2 に分解 object Main { def main(args : Array[String]): Unit = { var p = new Pair(3, 4) val Pair(x, y) = p // p を x と y に分解する printl…
HHa(H派)メモ - 6/13(金)夜:Scala勉強会やります@新宿三井ビル34階豆蔵 私も参加しますこの機会に Scala をちゃんと覚えたい
Actor 全然わかんないやっぱり Haskell とか Erlang を勉強してから Scala やったほうがいいのかな
こうかな object Main { def main(args : Array[String]): Unit = { var ls = Stream.from(0) // 0, 1, 2, 3, 4, 5...の無限リスト作成 ls.take(5).foreach(println) // 0, 1, 2, 3, 4 } } こっちはメモScalaで無限リスト:Haskellライクに
あとで読むのでメモ Spirit of Apprenticeship (みならいだましい) - Scalaチュートリアル
Rainy Day Codings - Scala で怠惰なリテラル表記 タプルを使うとこんな感じで書ける object Main { def main(args : Array[String]): Unit = { val ls = List( ("Akira", 23, "Japan"), ("Johnny", 38, "America"), ("Millia", 16, "Russia") ) ls.foreach{…
静的ダックタイピングのようなもの「Tはxxメソッドを持っていればいい型」のようなことができるベター Generics です object Foo { def name = "Foo" } object Bar { def name = "Bar" } object Main { def dispName(x :{def name: String}) = println(x.nam…
型に別名を付ける object Main { def main(args : Array[String]): Unit = { type StringEx = String // String に StringEx という別名を付ける val str: StringEx = "abc" println(str) } } object Main { def main(args : Array[String]): Unit = { type …
object Main { def main(args : Array[String]): Unit = { val ls = for (i <- List.range(0, 10)) yield i + 1 ls.foreach(println) // 1, 2, 3...10 } }
先頭に要素追加 var ls = List[int]() ls = 3 :: ls ls = 1 :: ls ls = 4 :: ls ls.foreach(println) // 4, 1, 3 全要素に操作 var ls = List(3, 1, 4) ls = ls.map(_ + 1) ls.foreach(println) Range for (item <- List.range(0, 5)) { println(item) } // …
object Main { def main(args : Array[String]): Unit = { var xml = <Root> <Person>Akira</Person> <Person>Johnny</Person> </Root> println(xml) } } <Root> <Person>Akira</Person> <Person>Johnny</Person> </Root> あれ、スペースが入ってる var person = <Person>akira</Person> var root = <Root>{person}</Root> println(root…
その名の通り「暗黙の型変換」 型変換のメソッドだけ用意しておけば、変換元の型にないメソッドが呼ばれた時に 変換メソッドが暗黙に呼ばれ、変換先の型のメソッドを呼び出すことができる これを使えば、特定の型にメソッドを追加する、ということもできる(E…
手続き型的なリスト処理 object Main { def main(args : Array[String]): Unit = { var ls = List[int](3, 1, 4) ls = ls.sort((x, y) => x < y) for (x <- ls) println(x) } } 関数型的なリスト処理 List(3, 1, 4).sort((x, y) => x < y).foreach(println) …
まだよくわかってないけどメモ object Main { trait Adder[T] { def add(lhs: T, rhs: T): T } // int型の + 処理 implicit object IntAdder extends Adder[int] { def add(lhs: int, rhs: int): int = lhs + rhs } // String型の + 処理 implicit object St…
カリー化とかよくわかってないですが、2ch の Scala スレにおもしろいのがあったのでメモ object Main { def add(a :int)(b :int)(c :int) = a + b + c def main(args : Array[String]) : Unit = { print(add(1)(2)(3)) // 6 } }
SEの行き着くところ… - Scala開発環境の構築(Eclipse編)
【新・言語進化論】次にくる!新登場言語 - 第3回:オブジェクト指向と関数型を兼ね備えた「Scala」気になる開発プロダクツ - 第7回 Scala 2.6.0-finalなぜScalaなのか?多忙な Java 開発者のための Scala ガイド: オブジェクト指向のための関数型プログラミ…