サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
kxbmap.hatenablog.com
これは Scala Advent Calendar 2015 - Adventar の18日目の記事です。 Scalaでは特に何もしなくてもJava製のライブラリをそのまま利用することができます。 ただ、そのまま使うよりもScalaでラップしたライブラリを作ることで使いやすさが向上することが多いです。 自分もそのためにライブラリをいくつか開発しています。 kxbmap/configs · GitHub Typesafe configのラッパー kxbmap/jooqs · GitHub jOOQのラッパー 未リリース この記事では、JavaライブラリをScalaでラップする時に使えるテクニックを見ていきたいと思います。 ラップする方法 最初に、ひとくちにラップするといってもやり方としては複数あると思います。 違う型として定義する まず、ラップしたい型を内部に持ってメソッド呼び出しを委譲する
追記'15/11/15: 専用の設定が追加されました Scalaプラグインバージョン2.0.181から(?)設定に項目が追加されました。2.0.181は現在ScalaプラグインのUpdate channelをNightlyに設定していればインストール可能。 下記のContinuation Indentの代わりに、Settings > Editor > Code Style > Scala > Other > Alternate Indentation for constructor args and parameter declarationsをチェックして4spacesに設定したら望む挙動になります。 Continuation Indentで設定した場合と違って、クラス・メソッド宣言以外のインデントに影響しません。 追記終わり #rpscalaの懇親会で話題になったものの皆さん知らないよ
Scalaz Advent Calendarの二日目です。 Tagged type ある型クラスのインスタンスが同じ型に対して複数定義されている場合、importによって使用するインスタンスを制御することができます。 object s1 extends App { type User = String object Hatena { import scalaz.Show implicit val HatenaUserShow: Show[User] = Show.shows("id:" + _) } object Twitter { import scalaz.Show implicit val TwitterUserShow: Show[User] = Show.shows("@" + _) } locally { import scalaz.syntax.show._ import H
configがJavaのライブラリでちょっと使いづらいのでScala用にラッパーを書きました。 https://github.com/kxbmap/configs configz というのもあったんだけど、これはScalaz力が足りず思ったように使えなかったです。 使い方 SBTのビルド定義に以下を追加します。 libraryDependencies += "com.github.kxbmap" %% "configs" % "0.1.0" Sample // sample.conf int.value = 42 int.values = [1, 2, 3] duration = 10ms bytes = 10k obj { foo = 23 bar = Hello } scala> import com.typesafe.config._ import com.typesafe.conf
例えばMySQLのon duplicate key updateなど まず、sql"..."で書けば何でもいけるのはいいとして def upsertUser1(id: String, email: String)(implicit session: DBSession) = sql""" insert into `user` (`id`, `email`) values ($id, $email) on duplicate key update `email` = values(`email`) """.update().apply() QueryDSLでinsert文を書いてsqls"..."をappendするもよし def upsertUser2(id: String, email: String)(implicit session: DBSession) = applyUpdate
ScalaでIntelliJのプラグインを作ろうと思ったのでメモついでに。 参考 http://confluence.jetbrains.net/display/IDEADEV/PluginDevelopment http://www.jetbrains.com/idea/training/demos/google_search.html 下のLive Demoと同じものを作るところまでやってみます。 環境設定 IntelliJのJDKとScalaライブラリの設定、Scalaプラグインのインストールは済んでいるとします。 IntelliJ IDEA Community Editionをインストール 次の設定に使うもので、開発はUltimate Editionでするとしてもこちらも入れる必要がありそうです。*1 今回はちょっと試してみたかったのでIntelliJ IDEA 11(Nika)の
Scala Advent Calendar jp 2011 - [PARTAKE]の8日目です。 Scalaを利用している企業というとTwitterが有名ですね。そのTwitterは開発したScalaライブラリを色々と公開しています。 util-evalはその内のひとつで、実行時にScalaコードをコンパイル&評価するライブラリです。主に設定ファイルをScalaで記述するために利用されます。 で、ゲームの設定もScalaで書いたら(自分が)幸せになれるので使ってみました。 設定の定義 ゲームの設定として、IDが割り振られた武器のMapがあるとします。 武器には名前と攻撃力が設定できます。 case class Weapon(name: String, attack: Int) trait GameConfig { def weapons: Map[Int, Weapon] } 武器設定ファ
もう誰かやっている気がするけども。 元ネタ GroovyのMarkupBuilderで再起的な構造のXMLを生成する - No Programming, No Life GroovyでKey、ValueをXMLにクールに出力する-keyValueXml.groovy- - Togetter C# で Key、Value な コレクションを XML にしてみた - お だ のスペース ポリモーフィズム版 本体 テスト Scalaで書くからには型安全にしたく、Valueクラスをみんな継承してやってます。 あと属性を指定できるようにしました。 Elemのコンストラクタさんは第一引数(prefix)に空文字列を渡すとnullにしろ(nullかよ)とか、第四引数(scope)にnullを渡すとTopScopeにしろとか言ってくれるのは有り難いんだけど、第三引数(attributes)にnull渡して
このページを最初にブックマークしてみませんか?
『kxbmap.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く