ブックマーク / kmizu.hatenablog.com (10)

  • 初学者向けの Scala Tips (7) - objectで名前空間を作る - kmizuの日記

    たとえば、プログラミング言語のパーザを書いていて、プログラムの木構造を次のように表現したいとします。 sealed trait Expression case class Addition(lhs: Expression, rhs: Expression) extends Expression case class Subtraction(lhs: Expression, rhs: Expression) extends Expression case class Multiplication(lhs: Expression, rhs: Expression) extends Expression case class Division(lhs: Expression, rhs: Expression) extends Expression case class Number(value:

    初学者向けの Scala Tips (7) - objectで名前空間を作る - kmizuの日記
    quassia88
    quassia88 2014/06/11
    たとえば、プログラミング言語のパーザを書いていて、プログラムの木構造を次のように表現したいとします。 sealed trait Expression case class Addition(lhs: Expression, rhs: Expression) case class … via kmizuの日記 http://ift.tt/1ctdxYo
  • 初学者向けの Scala Tips (6) - 文字列リテラル中のインデントを整える - kmizuの日記

    これは、気の利いたIDEであれば自動でやってくれるのであえて覚える必要はないのですが、一応。 Scalaでは、複数行に渡る文字列リテラルを次のようにして書く事ができます*1。 val foo = """ class Foo { def foo(): Unit = { println("foo") } } """ ここで、見やすさのためにdefの部分をもう一段インデントして、かつ、出力される文字列は変更したくないときがあります。そのようなときは、 val foo = """ |class Foo { | def foo(): Unit = { | println("foo") | } |}""".stripMargin とすると良いです。これで、|の部分が除去されて、その次のカラムが行頭になるような複数行文字列が生成されます。これはScalaで複数行文字列を意図通りに出力するときのイディオム

    初学者向けの Scala Tips (6) - 文字列リテラル中のインデントを整える - kmizuの日記
    quassia88
    quassia88 2014/06/09
    これは、気の利いたIDEであれば自動でやってくれるのであえて覚える必要はないのですが、一応。 Scalaでは、複数行に渡る文字列リテラルを次のようにして書く事ができます*1。 val foo = """ class Foo { def foo(): Unit = {
  • 初学者向けの Scala Tips (5) - パターンマッチと無名関数の組み合わせを簡潔に書く - kmizuの日記

    Scala初学者の方が書くコードには、しばしば以下のようなものが散見されます。 list.map {x => x match { case A => case B => case _ => } } 無名関数を作るための構文である{x => ...}とexp match { case ... }を別々に考えるとこのようなコードになるのは無理はありません。しかし、これはもっと簡潔に書くことができます。改良したのが以下のコードです。 list.map { case A => case B => case _ => } 前者の書き方に比べて断然簡潔ですね。特別な事情がない限り、無名関数の引数を即座にパターンマッチする必要がある場合、後者の書き方を使いましょう。 ちなみに、この書き方を教えると結構びっくりされる方が多いようで、この構文はPartialFunctionのためのものだと思っていた、という

    初学者向けの Scala Tips (5) - パターンマッチと無名関数の組み合わせを簡潔に書く - kmizuの日記
    quassia88
    quassia88 2014/05/25
    Scala初学者の方が書くコードには、しばしば以下のようなものが散見されます。 list.map {x => x match { case A => case B => case _ => } } 無名関数を作るための構文である{x => ...}とexp match { cas… via kmizuの日記 http://ift.tt/1ctdxYo
  • 初学者向けの Scala Tips (4) - 可変長引数を取る関数にSeq[T]を渡す - kmizuの日記

    TipsというよりFAQの部類ですが、ときどきつまづく方がいるようなので。 Scalaで以下のような可変長引数を取る関数printAllを定義すると、 def printAll(ss: String*): Unit = { ss.foreach(println) } printAll("BAZ", "FOO", "BAR") //BAZ //FOO //BAR のように任意個のStringを渡すことができます。問題は、既に val fooBar = Seq("FOO", "BAR") のように既にSeq型のオブジェクトが作られている場合。 fooBarをそのまま引数として渡し、printAll(fooBar)としてしまうと、 (snip) error: type mismatch; found : Seq[String] required: String printAll(fooBar)

    初学者向けの Scala Tips (4) - 可変長引数を取る関数にSeq[T]を渡す - kmizuの日記
    quassia88
    quassia88 2014/05/16
    TipsというよりFAQの部類ですが、ときどきつまづく方がいるようなので。 Scalaで以下のような可変長引数を取る関数printAllを定義すると、 ``scala def printAll(ss: String*): Unit = { ss.foreach(println) … via kmizuの日記 http://ift.tt/1ctdxYo
  • 初学者向けでない Scalaバッドノウハウ(1) - traitの初期化時にManifest型の値を取得する - kmizuの日記

    ネタが尽きたわけではないが、Manifest絡みで嫌な現象に遭遇したのでメモと回避方法(現在はManifest型をつかうべきではないがそれはおいておく)。 まず、問題として、次のようなコードを書くと実行時例外(unknown error)が発生する(Scala 2.10.4)。 trait M[T] { implicit val m: Manifest[T] } case class Point(x: Int, y: Int) object Main extends M[Point] { implicit val m: Manifest[Point] = manifest[Point] def main(args: Array[String]) { json4sObj.extract[Point] } } このようになる原因は、traitでの初期化でmanifestメソッドを呼び出すとnu

    初学者向けでない Scalaバッドノウハウ(1) - traitの初期化時にManifest型の値を取得する - kmizuの日記
    quassia88
    quassia88 2014/05/14
    ネタが尽きたわけではないが、Manifest絡みで嫌な現象に遭遇したのでメモと回避方法(現在はManifest型をつかうべきではないがそれはおいておく)。 まず、問題として、次のようなコードを書くと実行時例外(unknown error)が発生
  • 初学者向けの Scala Tips (4) - パターンマッチのcase節には複数の式が書ける - kmizuの日記

    ときどきみかけるコードなのですが、パターンマッチを使ったコードで、次のようなものがあります。 exp match { case A => { expA1 expA2 ... } case B => { expB1 exbB2 ... } } Scalaでは、case節に複数の式を続けて書くことができるのでこのようなブレースは不要です。 exp match { case A => expA1 expA2 ... case B => expB1 expB2 ... } としてしまいましょう。

    初学者向けの Scala Tips (4) - パターンマッチのcase節には複数の式が書ける - kmizuの日記
    quassia88
    quassia88 2014/05/12
    ときどきみかけるコードなのですが、パターンマッチを使ったコードで、次のようなものがあります。 exp match { case A => { expA1 expA2 ... } case B => { expB1 exbB2 ... } } Scalaでは、case節に複数の式を… via kmizuの日記 http://ift.tt/1ctdx
  • 初学者向けの Scala Tips (3) - 型に対するマッチより構造に対するマッチ - kmizuの日記

    皆さんご存知の通り、Scalaにはパターンマッチという機能があります。この機能、しばしば型に対するswitch-caseとして使われていることがあるようです。 たとえば、 sealed trait class Value case class Hoge(value: Int) extends Value case class Foo(value: String) extends Value case class Bar(value: List[String]) extends Value というコードがあったとき、しばしば value match { case hoge:Hoge => doHoge(hoge.value) case foo:Foo => doFoo(foo.value) case bar:Bar => doBar(bar.value) } のような形で使われることがありま

    初学者向けの Scala Tips (3) - 型に対するマッチより構造に対するマッチ - kmizuの日記
    quassia88
    quassia88 2014/05/09
    皆さんご存知の通り、Scalaにはパターンマッチという機能があります。この機能、しばしば型に対するswitch-caseとして使われていることがあるようです。 たとえば、 sealed trait class Value case class Hoge(value: Int) e… via kmizuの日記 h
  • 初学者向けの Scala Tips (2) - nullからOptionへの変換 - kmizuの日記

    Scalaでnullを使っていいのは小学生までだよねー、というのは冗談ですが、Scala文化圏ではnullを使わないのが原則です(いくつか例外はありますが)。代わりに出てくるのがOption型です。しかし、Scalaでは困ったことにnullを返すJavaのメソッドを呼び出さなければいけない場面がたくさんあります。 たとえば、以下のようなコードを書かなければいけない場面にはしばしば遭遇します。 val javaMap: java.util.Map[String, String] = javaObject.getMapping() val value: String = javaMap.get(key) // 型注釈はあえて付けている if(value != null) { ... } else { ... } さて、ここで困るのが、javaMap.get(key)はkeyに対応する値が入って

    初学者向けの Scala Tips (2) - nullからOptionへの変換 - kmizuの日記
    quassia88
    quassia88 2014/05/08
    Scalaでnullを使っていいのは小学生までだよねー、というのは冗談ですが、Scala文化圏ではnullを使わないのが原則です(いくつか例外はありますが)。代わりに出てくるのがOption型です。しかし、Scalaでは困ったことにnullを返
  • Scala 2.11.0で標準ライブラリから分離されたライブラリのjarファイル - kmizuの日記

    今日のScala勉強会第124回 in 郷で話題に出てたことの備忘録。Scala 2.11で、scala.util.parsing.combinatorとscala.xml、scala.util.continuationsが標準のライブラリから分離されたのだが、これを今まで通りに使うにはどうすればいいのか。実は、分離されたライブラリの内、前者二つは以下に https://oss.sonatype.org/content/repositories/releases/org/scala-lang/modules/ continuationsは https://oss.sonatype.org/content/repositories/releases/org/scala-lang/plugins/ に入っているので、これらを今まで通りに使うにはsbtの設定ファイルに libraryDepen

    Scala 2.11.0で標準ライブラリから分離されたライブラリのjarファイル - kmizuの日記
    quassia88
    quassia88 2014/04/24
    今日のScala勉強会第124回 in 本郷で話題に出てたことの備忘録。Scala 2.11で、scala.util.parsing.combinatorとscala.xml、scala.util.continuationsが標準のライブラリから分離されたのだが、これを今まで通り… via kmizuの日記 http://ift.tt/1ctdxYo
  • 『プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.3』 所感 - kmizuの日記

    Vol. 2の時に記事を寄稿した関係もあり、事前にPDF版をいただいていました。ようやく一通り目を通したので、簡単な紹介をしたいと思います。なお、注文はこちらから。 魔導書Vol.3の副題は「“Parallel, Concurrent, and Distributed Programming”並行世界の魔物に人類はどう立ち向かうのか。」です。 目次は以下のようになっています。各記事は、最初の2ページ程度試し読みが可能ですので、興味をもった方はそちらを読んでみるのも良いかと思います。 序文 熊崎 宏樹 Lock-free入門 熊崎 宏樹 OpenACC 藤田 典久 ErlangとScalaにおけるアクターモデルの紹介 幾田 雅仁 C#の非同期処理 岩永 信之 Real World STM ~作って学ぶSTM~ 石井 大海 データ並列への招待 shelarcy 合成可能なメッセージパッシング

    『プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.3』 所感 - kmizuの日記
    quassia88
    quassia88 2013/12/23
    随分遅くなってしまいました。Vol. 2の時に記事を寄稿した関係もあり、事前にPDF版をいただいていました。ようやく一通り目を通したので、簡単な紹介をしたいと思います。なお、注文はこちらから。 魔導書Vol.3の副題は「
  • 1