きくらげ観察日記

好きなことを、適当に。

Scala

implicit parameterによる型クラスの罠

ブログ移転しました。新しいサイトはこちら: genkami.github.io

getter, setterの定義

Scalaでは「hoge_=(x)」という形のメソッドを定義すると、「hoge = x」という形でそのメソッドへのアクセスができます。 class Coffee( private var country_ : String, private var roast_ : String, private var grind_ : String ) { def country = countr…

ScalaFX: TaskとService

JavaFXでは別スレッドで作業を行うためにTaskとServiceという2つのクラスを提供しています。 ScalaFXでも同名のクラスは用意されているのですが、そのコンストラクタの定義を見てみると new Task(delegate: javafx.concurrent.Task[T]) new Service(delegate…

SBTで外部のプライベートGitリポジトリを参照する

SBTには、Mavenリポジトリに登録されていないようなプロジェクトも依存関係に追加することができるという便利機能があります。使い方は以下の通り lazy val root = (project in file(".")). settings( // ... ).dependsOn(uri("git://some-git-repository.co…

独自パターンマッチを定義する。

Scalaでは、unapply, unapplySeqメソッドを定義することによって、任意の型に対して独自で後付けのパターンマッチを定義することができます。 unapply 何らかの値Oに対して、O.unapply(x)はパターンマッチに成功したら Some( (x1, x2, x3, ..., xN) ) を返し…

定数(に見えるもの)の定義いろいろ

Scalaでは、例えばInt型の値xを定義するのにも次のような複数の方法があります scala> val x: Int = 3 scala> lazy val x: Int = 3 scala> def x: Int = 3 今回はこれらの違いについてメモしておきます。 valでの定義 これが一番一般的な定義の方法です。 va…

Null, Nothing, Any

Any Scalaでは全てのクラスはAnyのサブクラスとなります。そのため、任意のAny型の変数には任意の型の値を代入することができます。 Anyのサブクラスとして、任意のプリミティブな値を表す型であるAnyValと、任意の参照型を表すAnyRefの2種類が存在します。 …

ScalaFXで作ったウィンドウのonDragDroppedが呼ばれない

問題となったコード import scalafx.Includes._ import scalafx.application.JFXApp import scalafx.application.JFXApp.PrimaryStage import scalafx.geometry.Insets import scalafx.scene.Scene import scalafx.scene.input.DragEvent import scalafx.sce…

ScalaFXでデフォルトのCSSが見当たらない

ScalaFXの練習として、とりあえず公式にあるサンプルを写経していた所、次のような現象に遭遇しました。問題になったコードは以下の通り。ほぼ下記のサイトのコードそのままです。 http://www.scalafx.org/docs/faq_TableView_with_Custom_cell/ import scal…

Scalaのtrait

traitとは 具体的な実装を持たないようなクラスをScalaではtraitと呼びます。Javaでいうinterfaceのようなもの。 abstract classとの使い分けは、abstract classが「それが何であるか」を指定するのに対し、traitでは「それがどういった振る舞いをするか」を…

ScalaFXを触ってみる

ScalaFXについてのまとまったドキュメントが見当らないので(JavaFXのドキュメント見ろってことなのかな?)、ScalaFXに触っていく過程で分かったことを少しずつ書いていこうと思います。 とりあえずHello World まずはとりあえず「Hello, World!」と書かれたウ…

SBTのインストールから、簡単なプロジェクトができるまで

バイトとかでScalaに触ったことはあるけど、そういえば自分で1からプロジェクト作ったことは無かったなぁと思ったので。 インストール 各々の環境に合わせて。僕はMacなんでbrew使いました。 $ brew install sbt とりあえず実行 $ sbt console と打てばとり…