Java変態文法最速マスターなんてのがかなりブクマされてるみたいだが、変態さならJavaなんてScalaの足元にも及ばないぜ!!ということで、Scala版を書いてみました。しかし、実はあまり変態ではないかもしれません。元ネタと違って、これを読めば何かがわかる、という意味の実用性はあまり無いでしょう。 implicit conversion編 基本 Scalaのimplicit conversionは使いようによってはScalaの強力な型システムを台無しにしてしまう力を持っています。たとえば、 implicit def string2int(x: String): Int = Integer.parseInt(x) というimplicit conversionを定義してやると、"300" / 3が100になるなどというキモい挙動を実現することができます。また、さらにカスタマイズして、16進数
適当なインスタンスから JSON 文字列を出力したいなーと思い、折角なので Refrection を使ってやってみた。 reflection Scala(Java?) での Reflection は obj.getClass でクラス情報を取得するところから。 取得したクラスに対して getDeclaredFields, getDeclaredMethods を呼び出すことでメンバの情報が取れるので、後はお好きなように。 取得した method は invoke で呼び出せる。 できたもの abstract class Dumpable { def dumpMap(): Map[String, Any] = { val cls = this.getClass cls.getDeclaredFields.map(_.getName).map( x=>(x, cls.getDeclaredMe
もう2週間以上前にもなりますが、Wicket勉強会 2011-01 : ATNDに行ってきたんですよ。 そこでWicket1.5からNew Event Systemってのが導入されてこれはScalaと相性いいんじゃね?みたいな 話になって、そりゃ俺に対して振ってるんだな、と思って書いてみましたが、そんなことより その後のさゆりさんがどうなったのか気になります。届け!この想い!! Wicket勉強会開催直前です。 - 矢野勉のはてな日記 はてなブックマーク - Wicket勉強会開催直前です。 - 矢野勉のはてな日記 New Event Systemって くわしくは以下の資料を見てくださいね。 http://public.iwork.com/document/ja/?a=p38265472&d=Wicket勉強会201101.key 簡単に言うと、コンポーネントとかがイベントを発行したり、イ
このまえ、夢の中でね、あるコレクションの中から特定のシグニチャを持つオブジェクトをより分けるようなコード書いてる夢見たんですよ。ええ、見たんです夢で。 で、ふと目が覚めて(深夜3時半)おもむろにREPLでいろいろやってみた結果を書こうと思います。ええ、書いてみます。 Structural Subtyping(構造的部分型)って何ぞ? 例から入ります。あるメソッドのシグニチャ(名前、引数の例えば{def mkString (start:String, sep:String, end:String):String}というシグニチャを持つ型Aを定義すると、上記のシグニチャを持つ型Bや型CはAの派生型と見なされるわけです。 このように、2つの型がもつメソッドなどの構造によって派生関係が決まるのがStructural Subtyping(構造的部分型)というものです。対して、通常のextendsなど
「ハイヤーーーーーッッ!!!」 と気合いを入れたところで、今日はScalaのコレクションライブラリで多用されている、Higher kind genericsについて軽く解説したいと思いハイヤーーーーーッッ!!! Higher-kind Generics(type constructor parameter)って? まぁぶっちゃけ@kmizu が解説してくれてるのでコレ読んでもらえばおけです。 ScalaのHigher-kind Genericsについて - Togetter そういえば最近Javaでもid:Nagiseによるこんな話がありましたね。 Javaによる高階型変数の実装 - プログラマーの脳みそ Java による高階型変数と Scala とジェネリクス - Togetter 要は、型パラメータを取る型パラメータ(?)が使えるよって話。 trait AttrHelper[+Hold
一昨日の記事で紹介したように、 scala-2.9.0.r24111-b20110127020129 を落としてきて、試してみた 追記:やはりなんだか、色々仕様変わってるみたいなので、そのまま残しておきますが以下はあくまで参考程度に。dynamicのソースも2.9.0RC1がでた2011/3/26日時点では、空になって、コンパイラで特殊処理するようになったみたいだし。 そもそもdynamic自体が、コンパイル時にオプションつけないと働かないようになったようです。あと、みずしまさんによるちょっとした説明 2011/1/28日時点でのDynamicのソース↓ package scala /** A trait that supports dynamic invocations. Instances `x` of this trait * allow calls `x.meth(args)` f
最近、Scala本が増えてきてますが、早い話こういう話になりますよね。本はわかった、コード書かせろとw 実際にコーディングするための開発環境はどれがいいのか、触ってきた感想を超簡単にレポートします。 触った開発環境は以下です。 Eclipse + Scalaプラグイン Emacs + ENSIME NetBeans + Scalaプラグイン IntelliJ IDEA + Scalaプラグイン EclipseのScalaプラグインであるScala IDE for Eclipseは頑張っているようですが、時々応答しなくなるとか、まだ安定性に欠ける感じです。まぁ、時間で解決できるような気がしています。安定するようになれば、インクリメンタルビルドも使えるようになると思うので、かなり期待してます。ですが、今はちょっと実用レベルではないと思います。 Emacs + ENSIMEは結構軽そうで よさげ
Welcome to Scala hack-a-thon #1’s documentation!¶ Contents: 1. Scala開発環境の準備 1.1. Scala実行環境のインストール 1.2. 開発環境のセットアップ 1.3. その他やっておくと便利なこと 2. Scalaの開発スタイル 2.1. ソースコードとコンパイル 2.2. アプリケーションを作り、実行する 2.3. インタプリタでの実行 3. Scalaの基本 3.1. 基本的な文法 3.2. 関数編 3.3. クラス、オブジェクト、トレイト 3.4. トレイト(trait) 3.5. importとpackage 3.6. ケースクラスとパターンマッチ 4. Scalaの高度な機能 4.1. Implicit ConversionとImplicit Parameter 4.2. 型のパラメータ化 4.3. 遅延評価
Scalaで集合知プログラミングのまとめです PythonとScalaのお勉強を兼ねつつもゆる〜い感じで進めていきますデス 目次 1章 集合知への招待 Scalaで集合知プログラミング その1 2章 推薦を行う 嗜好データの定義 Scalaで集合知プログラミング その2 ユークリッド距離を使った類似度 Scalaで集合知プログラミング その3 ピアソン相関係数を使った類似度と類似度ランキング Scalaで集合知プログラミング その4 アイテムを推薦する Scalaで集合知プログラミング その5 アイテム間の類似を計算する - 嗜好値データの変換 - Scalaで集合知プログラミング その6 deli.cio.us APIの利用準備 Scalaで集合知プログラミング その7 deli.cio.us APIを利用した推薦 Scalaで集合知プログラミング その8 アイテムベースのフィルタリング
JavaとScalaとC#のジェネリクスは、いずれも継承を持ったオブジェクト指向言語においてParametric Polymorphismを実現するための手段であり、それぞれ異なった特性を持っている。というわけで、それぞれの言語においてジェネリクスがどのようにサポートされているかを比較した表を用意してみた。後で気が向いたら、各項目の説明を追加するかも。 Java(5.0以降) Scala C#(4.0) ジェネリックなクラス ○ ○ ○ ジェネリックなメソッド ○ ○ ○ 型パラメータの上限 ○ ○ ○ 型パラメータの下限 × ○ × 型パラメータの推論 ○ ○ ○ 全ての型のサブタイプ(ScalaにおけるNothing) × ○ × definition-site variance × ○ ○ use-site variance ○(Wildcard) ○(Existential Typ
なんだかおいしそう・・・ヽ(゜▽、゜)ノ もうここまでくるとあれだね、カッコいいを通り越して意味わかりませんですね。 駄目もとで聞いてみますか。先生! カリー化 カリー化(currying)とは、計算機科学分野の技法の一つ。複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。 関数 f が f:(X×Y)→Z の形のとき、f をカリー化したものを g とすると、g は f:X→(Y→Z) の形を取る。 先生やっぱりわかりません! やっぱり書いてみないとだめだな。 scala> def foo(x:Int)(y:Int) = x * y foo: (Int)(Int)Int scala> foo(3)(4) res13: Int = 12 あれ?これ普通の関数とどう・・・ はっ! scala> var b
関数のパラメータに「implicit」をつけておくと、関数の呼び出し時にその引数を省略できるようになります。省略された引数には、メソッドの呼び出し元コンテキストで一番それっぽいimplicit付きの値をコンパイラが選択して挿入してくれます。 「implicit」は引数グループ?(「(<引数,引数..>)」。この表現はあっているのか?)の先頭にだけ指定でき、そのグループの引数全体が省略可能になります。 普通の引数と混在させたい場合は、普通の引数だけ別のグループにして、そっちには「implicit」をつけなければOK。このとき、「implicit」付きのグループは関数の最後にする必要があります。 // 以下の3つはOK def aaa( implicit s:String ) = "" def bbb( )( implicit s:String ) = "" def ccc( implicit
前に、ListからTupleに変換するメソッド作りましたが、それの逆の話。 まずそもそも、Tupleには、productIteratorというメソッドがあり*1、それを呼んだあとにtoListすればListになります。 REPLの出力そのまま貼りつけ↓ scala> ("scala","clojure","java") res0: (java.lang.String, java.lang.String, java.lang.String) = (scala,clojure,java) scala> res0.productIterator.toList res1: List[Any] = List(scala, clojure, java) しかし、productIteratorが返すのは、Iterator[Any]型です。 それをtoListしても、もちろん、List[Any]型にしかな
ちょっとPartialFunctionについて考えてみた(・∀・) その前に、scalaで、caseという予約語がありますが、これが結構厄介というか、初心者には一見わかりにくいとおもうんですが、役割としては(たぶん)4種類ありますよね?例外のcaseはたぶんべつだから5種類じゃね? まず、そのcaseの使われ方に付いて簡単にまとめから・・・ match式でのcase これはまあ大雑把にいってしまえば、Javaとかのswitchのcase節と同じですね。他にも機能色々あるけど caseクラス caseクラスを定義するときにつかう場合。これはこれで、かなり多機能でいろいろあるけど、今回は触れない 関数リテラルの引数のところでの、パターンマッチ*1 たとえば、 val list = List((3,"java"),(6,"scala"),(5,"ruby")) //(Int,String)のリス
この記事はscala advent calendarのDay2です(`・ω・´) scalaの言語仕様書の4ページあたりに記載されてる、予約語についてひと通りまとめてみます。ちょっと時間なくて説明適当なところとかあるのはあとで直します、すいません(´Д`) ちょっとだけ追記した 仕様書↓ abstract抽象クラス表すのに使用。 ちなみに、メソッドやフィールドがabstractでも、scalaの場合は、abstractはつけません(つけると以下のようにエラーになる) scala> abstract class A{ | abstract def hoge | } <console>:6: error: `abstract' modifier can be used only for classes; it should be omitted for abstract members abs
The Scala 2.8 Collections API 英語 日本語1 *1 日本語2 *2 The Architecture of Scala Collections 英語 日本語 The Scala 2.8 Actors API 英語 日本語 すべて、scalaの公式サイトに掲載されているもので、しかも、scalaの開発者の人達が自ら書いたものなので、かなりわかりやすくまとまっていて、なおかつ正確です。 しかも、それぞれ日本語に訳してくれた方がいます! *3 とくにThe Scala 2.8 Collections APIについては、一番最初に読むべき かつ 一番重要だと思います。 The Architecture of Scala Collectionsについては、The Scala 2.8 Collections APIのほうを読んでからでいいと思います。こちらは内部構造がどう
【この記事はScala Advent Calendar jp 2010 : ATNDの3日目の記事です。】 再帰の話をします。 何やら難しいと思われがちな再帰ですが、 ポイント(というか鉄則を)押さえてしまえばとっても簡単です。 再帰のポイントは2つです。 一段階簡単な問題を考える。 終わりを考える。 たったこれだけ。 「難しい問題を少しずつ簡単にしていくのが再帰」です。 本来、再帰は難しい問題を解くための簡単な手段なのです。 具体的に 1から10までの足し算を再帰でときます。 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = ? まずは再帰のポイントの一つめ 一段階簡単な問題を考える。 に従ってみましょう。 1 から 10 までの足し算よりちょっと簡単な問題は。。。 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = ? 1 から 9
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く