Scala/パッケージ

Scala/パッケージ

複数のクラスをまとめておく名前

ファイル、ディレクトリ構造

Java の場合はパッケージ構造とディレクトリ構造を一致させなければならず、さらにファイル名もクラスと一致させる必要があった。 しかし Scala ではこの制約はなくてどのファイルにでも書けるし、どのディレクトリにあってもよい

書き方

package jp.co.hogehoge {
  class Hoge {
  }
}

このように書く。

入れ子構造にして

package jp {
  package co {
    package hogehoge {
      class Hoge {
    }
  }
}

このようにも書ける。

しかし通常はパッケージは常にあるし、パッケージの度にインデントがウザいので

package jp.co.hogehoge
class Hoge {
}

このように括弧を省略して書いてしまう。

使い方

使いたい所で

import jp.co.hogehoge.Hoge

このように引き込む。

Java のワイルドカードのようにパッケージ丸々全部したいときは、アンダースコアを使って

import jp.co.hogehoge._

このように書く

全部じゃないけど、複数のクラスを同時に引き込みたいときは括弧を使って

import jp.co.hogehoge.{Hoge, Piyo}

このように記述する

Java とかでは異パッケージの同一名称クラスを混ぜて使う場合はフルパッケージで書く必要があったが、Scala では別名で引きこむことができる

import jp.co.hogehoge.{Hoge => Hooge}
import jp.co.piyopiyo.{Hoge => Hoooge}

矢印で別名を指定する。

パッケージオブジェクト

パッケージなんだけど、メンバとか持てちゃうやつ。

package object hogehoge {
  val aaa = "aaa"
  def bbb = {
     aaa
  }
}

これで hogehoge パッケージ内からだと、 aaa メンバや bbb メソッドがどこからでも使用可能になる。

共通で使うやつまとめて置いておく置き場と思えばよいか

scala/package.txt · 最終更新: 2015-08-12 10:44 by ore