[[SCALAの記事一覧]] &topicpath; *目次 [#o164eca9] #contents *リンク [#t6f19afd] とりあえず、リンク集をリンクしといたよ。 これなら、勝手にリンクがメンテしてもらえるから、らくちんだよね。 http://diaspar.jp/-/scala *Scala2.8の仕様変更 [#x7aff6cc] http://www.slideshare.net/takedasoft/scala28-3334803 *Scala for Java programmers [#d9a170ae] http://www.asterisk-works.jp/wiki/index.php/Scala_for_Java_programmers#.E3.82.AF.E3.83.A9.E3.82.B9.E5.AE.A3.E8.A8.80 *java使いのためのScala の勉強のタメの資料作り javaと連携 [#f36af979] http://d.hatena.ne.jp/nazoking/20100513/1273688373 *基礎を終えた人のScalaミニtips [#i85ab0ca] http://inforno.net/articles/2008/02/03/some-scala-tips-for-beginners **C言語ライクなforはどうかくの? [#a9e11e02] val a = Array(1,2,3,4,5) var i= -1;while({i += 1; i < a.size;}) { println(a(i)) } **Predef [#y07b48aa] def exit(status: Int): Nothing = { java.lang.System.exit(status) throw new Throwable() } def assert(assertion: Boolean) { if (!assertion) throw new java.lang.AssertionError("assertion failed") } def print(x: Any) = Console.print(x) def println() = Console.println() def println(x: Any) = Console.println(x) **applyでオブジェクトをメソッドのように呼び出せるよね? hoge(index) = valueはオーバーライドできないの? [#w3a8f9a4] object dictionary { val data = Array(null, "A","B","C") def apply(x:String) = x match { case "one" => data(1) case "two" => data(2) case "three" => data(3) } def update(x:String,y:String) = x match { case "one" => data(1) = y case "two" => data(2) = y case "three" => data(3) = y } } dictionary("one") = "X" dictionary("two") = "Y" dictionary("three") = "Z" println(dictionary("one")+","+dictionary("two")+","+dictionary("three")) **可変長引数は取れますか。また、リストや配列を展開してメソッドにわたせますか。 [#d089283f] def sumPlus(plus: Int, n: Int*) = plus + sum(n :_*) **JAVAのObject型可変長変数をとるメソッドはどう呼びますか? [#b9a187a7] String.format("%d %s", List(1, "hoge").map(_.asInstanceOf[AnyRef]).toArray) **インスタンスのメソッドを束縛できますか?そのとき、メソッドがオーバーロードされている場合はどうしますか? [#n9d3e1ae] val format = (new SimpleDateFormat("dd")).format _:Date => String **カリー化はできますか? [#n0359029] def test(i:int, j:int) = { printf("i:{0}, j:{1}", i, j) } val f = Function.curried(test _)(1) f(1) **遅延評価は? [#k39e33d8] lazyを使います。Streamも使いこなせるとハッピーです。 たとえば、無限フィボナッチ数列は以下のように定義します。 lazy val fib: Stream[Int] = Stream.cons(0, Stream.cons(1, fib.zip(fib.tail).map(p => p._1 + p._2)))