2015年12月28日

日記

sbt で console を起動して src/main/resources フォルダ下のシステムリソースを読み込むプログラムを実行すると例外が投げられるぞ。 普通に IDE からテスト等を実行する分にはこれらのシステムリソースは読み込まれるんだが。 パッケージングして実行するとどうなるんだろうかな。

物理単位の変換をするコードをちょいと書いてるんだけど、いろいろな数値型に対してジェネリックに(Scala でそういう言葉遣いするんだっけ?)プログラミングしようとしてたんだけど、Scala では trait で Length[A: Fractional] (一応、Fractional は spire.math パッケージのものとして)のような型クラスの使い方ができないようで。 一応、Fractional[A] 型の(暗黙の)オブジェクトにアクセスできる抽象プロパティを定義しておいて、具体的な実装でそのオブジェクトを返せばいいんだけど・・・

import spire.math.Fractional

trait Length[A]{
  val algebra: Fractional[A]
}

class MetreLength[A: Fractional]{
  val algebra: Fractional[A] = implicitly[Fractional[A]]
}

ただ、このとき Length トレイト内で実装を行うときに数学的な演算子を適用できるようにする暗黙の型変換(spire.implicits._ でインポートできる)が効かなくなって、コーディングがものすごく面倒になるっぽい。 なんかコーディングおかしいかな?

ツイート (ツイート数 22)