scala

紫藤さんのところのschemeの継続渡しスタイルの一番簡単な例をscalaで書いてみた。

scala> def my_return(x : Any) = x my_return: (x: Any)Anyscala> def k_plus(a : Int, b : Int, c : Int => Any) = c(a + b) k_plus: (a: Int, b: Int, c: (Int) => Any)Anyscala> def k_mult(a : Int, b : Int, c : Int => Any) = c(a * b) k_mult: (a: I…

ふーん

scalaにも継続ってあるのか。。。 resetで継続範囲を指定し、shiftで継続を生成するらすぃ。

プログラミングscalaのP431にタイポハケーン

コンパイル設定のDSLで val repoScala = "Snapshot Repository" at "http://www.scala-tools.org/reposnapshots/" と書いてあるが、ページ下部にあるようにrepoとsnapshotsの間にハイフンが必要! val repoScala = "Snapshot Repository" at "http://www.sca…

ヤパーリ

Javaだと以下のコードはコンパイれる。 public String method(List<String> list, Integer arg1) { return "Hello"; } public String method(Integer arg1, List<String> list) { return "World"; } scalaだと以下のコードはコンパイれないもしくは 後勝ちになるぅ。 scala> </string></string>…

scalaでのオーバーロード

JavaもScalaもメソッドのオーバーロードが可能だが、 これを名前付き(キーワード)引数を組み合わせた場合、 どうなるんだろう? 順不同で呼び出せるハズなので、どちらのメソッドを呼ぶべきか 決定できないのではなかろうか?そもそも、パラメータリストの…

型消去・・・だとぉ

Javaでは互換性のために、ジェネリック型は、コンパイル時に型消去される。型消去とは、ListやListがListとして扱われること。つまり以下のようなシグニチャを持ったメソッドは共存できない。 public static List<String> get(List<String> list) { list.toString(); return </string></string>…

scalaのバク本

scalaやり直し中。 以前書いた、修飾に関するエントリが、現時点で意味不明。

trait強力すぎ

ミックスインぽいけど、クラス定義だけでなく、インスタンス生成時にもミックスインできるからRubyで言うところの特異メソッド的な使い方もできる。 しかし、ベターJavaとして使うのが普通なんだろうな、メタっぽい機能はフレームワークとかライブラリ作る人…

scala2.8

デフォルト引数と名前付き引数いいなぁ。 メソッドのオーバーロードや、メソッド内での判定文が削減でける。

オライリーのプログラミングscala買うた

なかなかの良書。 いきなりアクター使う。 コンパイルしたクラスとスクリプトを混在させながら写経していく感じ。 コップ本の次はコレで決まりやな。

Scala関数脳

買っちゃった

Scalaで学ぶ関数脳入門

本屋で見かけた。 コップ本よりはスゴクないよね。 買うか買わないか思案中。

Scalaの新しい本

発売日延期ぢゃねーか!

静的動的ハイブリッドと並列分散の擬似コード

静的動的ハイブリッド @dynamic-defで動的に定義、@dynamic-useで動的に使う。 このアノテーション部分は、コンパイラが型チェックしない。 Ruby風 String str = "just a regular String" @dynamic-def def str.title? self.upcase == self end @dynamic-use…

オブジェクトの関係性(can-do)

オブジェクト指向にはis-a関係や、has-a関係などの関係性がある。 is-aは継承を意味していて、has-aは集約を意味している。 F#の本によるとcan-doという関係性もあるらしい。これは、継承関係には無いが、「年を取る」とか「〜できる」という 振る舞いを表す…

ScalaでHashMap

java.util.HashMapを var map = new HashMap() map.put("A", new Integer(1)) としたら、第一引数がStringでrequireしてるのはNothing型だと コンパイラに怒られた。 ネットが使えない陸の孤島(他プロジェクトの事務所)にいたので 泣く泣く、変数を沢山用…

XMLが整形式であるか否かの確認

以下のようなコードで確認できる。 整形式でない場合は、エラーになる。 pythonの場合 C:\Python26>python Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for …

XMLの検査

XMLが整形式かどうか、読み込んでみればわかる。 詳細(コード)は後日。しかしscalaの場合、デカイXMLを読み込むとOutOfMemoryになる。 まぁメモリサイズを変えて実行すればOKだけど。 scalaは内部的にはSAXを使っているもよう。

Scalaは決して悪くない+ScalaでXmlを扱うメモ5(ふりかえり)

ちょっと振り返ってみる。 そもそも、ScalaでXmlの件で、もたついていたのは、 ろくにAPIも理解せず、組んだのが原因だと思う。 (いちおうコップ本は読んでます) まず、XMLリテラルの場合は、scala.xml.Elemになること \\や\で要素を抽出すると、scala.xml…

Scalaであるディレクトリ配下のあるファイルを処理するイディオム?

(new File(args(0))).list.filter(_.endsWith(".xml")).map{"ここは適当に"}

ScalaでXmlを扱うメモ3(なんかわかったカモ)

まず、こんなファイルがあるとする。 <foo> <testset> </testset> <bar> <hoge> <fizz> fizz </fizz> <buzz> buzz </buzz> </hoge> </bar> </foo> このファイルから、以下の部分だけ取り出したい <fizz> fizz </fizz> <buzz> buzz </buzz> 以下のように、取り出す。 scala> val xml = XML.load("d:\\testset.xml") xml: scala.xml.Elem = <foo> <testset> </testset> <bar> </bar></foo>

ScalaでXmlを扱うメモ2

ファイルから読み込んだりして あるタグの配下の要素を取得したい。 ファイル内は、改行があったりタブ文字や空白文字が 入ってたりする。 例えば <foo> <bar> </bar> <hoge> </hoge> </foo> のときに <bar> </bar> <hoge> </hoge> だけ取り出したい。 なのに str match { case <foo>{line @ _*}</foo> => println(line) } ってやっ…

ScalaでXmlを扱うメモ

DOCTYPE宣言があると、そこに記載されているdtdファイルを 参照しようとする。 無いと、java.io.FileNotFoundExceptionが発生する。ファイルからロードしたりして ルート要素に、xmlns:**属性があると \\や\で取得した、scala.xml.NodeSeqのルートタグにも…

ScalaでXmlを扱うメモ4(まとめ)

// 読み込む val xml = XML.load("d:\\testset.xml") // 目的のノード取得 val hoge = XML.loadString((xml \\ "foo" \\ "bar" \\ "hoge").toString) // さらに子要素のみを取得 val hoge_child = hoge match { case <hoge>{child @ _*}</hoge> => child } // 結果のXMLを…

アクセス修飾子 オブジェクト非公開

scalaでは、最強のアクセス修飾子としてprivate[this]というものがある。この可視性を設定されたものは、そのインスタンス内でのみアクセス可能。てゆーか、javaのprivateって、そもそもこのオブジェクト非公開じゃなかったんだ・・・ class A { private int…

仕事でScalaでJSP

仕事でJavaScriptに関連して、ブラウザから指定したファイルの内容(パラメタ)を 別の画面のJavaScriptに埋め込んで、そっからJavaScriptの 処理がメインという形でアプリを組みたいと思う。 画面1 ファイルチューザーが一個あるシンプルな画面サーブレッ…

修飾をScalaで実装してみる3.5

mct.Stringの場合は、最終的に別メソッドを呼び出すので 引数に自分自身が必要ですが mct.Employeeの場合は、最後まで呼び出すメソッドが変わらないので def getOverTimePay() : Double = { payment } にしておけば、 bean.メソッド(bean)を bean.メソッド()…

修飾はデコレータパターン?

修飾はデコレータパターンで実装できるのではないか? という指摘を貰いました。しかし、修飾同士が襷掛けに修飾し合う場合 うまく実装できない気がしてます。実際は、Scalaでは実装できるので Scalacが吐き出したclassをjadなどでjavaに変換すると インナー…

修飾をScalaで実装してみる3

修飾の例を2つScalaで書いてみましたが、 bean.メソッド(bean)というBeanのメソッドを、Bean自身を引数にして呼び出す コードが散在していて、なんかスッキリしないです。 これは、自分のスキル不足だとおもいますが、 なにかスッキリ書く手段はあるでしょ…

修飾をScalaで実装してみる2

修飾の例をもう1つ。 これは従業員を修飾したもので、 ManagerはStaffとManagementの修飾を隠蔽したものです。 ちなみにManagementは技術があっても資格があっても 時間外はゼロで。 Temporaryは、一律1000円です。 しかし、掛かり受けの順番で、テンプスタ…