2

これは、スーパークラス コンストラクターに渡す前にサブクラス コンストラクターに渡された値を操作するという問題に対する私の現在の不十分な解決策です。

class MissingItemsException(items: Set[String], itemsCategory: String)
  extends RuntimeException(MissingItemsException.makeMessage(items, itemsCategory))

private object MissingItemsException {

  private def makeMessage(items: Set[String], itemsCategory: String): String = {
    /* Format set as ['α','β','γ'] */
    val Items = items mkString ("['", "','", "']")
    "the following items %s were missing from '%s'" format (items, itemsCategory)
  }

}

コードを判読可能に保ちながら、変換コードが使用ポイントの近くに留まるように、変換を除外する方法はありますか?

4

1 に答える 1

5

初期イニシャライザを使用できます。

class MissingItemsException(items: Set[String], itemsCategory: String) extends {
  val customMessage = {
    val Items = items mkString ("['", "','", "']")
    "the following items %s were missing from '%s'" format (items, itemsCategory)
  }
} with RuntimeException( customMessage );

昔ながらのレキシカルスコープの観点からすると、コンパイルさえするのは奇妙です。しかし、それをコンパイルすると、あなたが望むことができます! ただし、それがあなたのソリューションよりも「優れている」かどうかは好みの問題です。

于 2013-05-23T20:38:03.260 に答える