kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

はてなダイアリーのスーパーpre記法がScalaに対応

したらしいので、早速試してみることに。

クラス:

class Point1(val x: Int, val y: Int)
case class Point2(x: Int, y: Int)
class Point3(var x: Int, var y: Int) {
  def aMethod { println("Point3") }
}

trait:

trait Hoge {
  def display
  val x: Int
  var y: Int
}
trait Foo extends AnyRef with Hoge

existential type:

val x: java.util.List[T] forSome { type T <: AnyRef} = new java.util.ArrayList

forSomeには対応してないらしい。

type alias:

type of_:[M[_], A] = M[A]

pattern match:

def reverse[T](xs: List[T]): List[T] = {
  def rev(xs: List[T], acc: List[T]): List[T] = {
    xs match { case y::ys => rev(ys, y::acc); case Nil => acc }
  }
  rev(xs, Nil)
}

(追記) yuroyoroさんの指摘で気づいたが、matchはハイライトされてないな。

string literal:

"hoge" +
"""a
b
c
""" +
"bar"

xml literal(+ for comprehension):

<ul>
  for(i <- 1 to 3) yield <br/>
  { for(i <- 1 to 3) yield <li>{for(j <- 1 to 5) yield (i, j)}</li> }
</ul>

XMLリテラルの中に書いたforがキーワードとして認識されてしまってる辺り、XMLリテラルにはまだちゃんと対応してないっぽい?

while:

var i = 0
while(i <= 10) i += 1
println(i)

if:

if(true) 1 else 2

以上の通りで、網羅的にチェックしたわけじゃないが、(一部を除いて)基本的な構文は一通り扱えるっぽい。