LoginSignup
1
1

More than 5 years have passed since last update.

View/Context Bounds の制約

Last updated at Posted at 2012-12-07

Advent Calendar を作る人に個人的に考えて欲しいこと

  1. コミュニティと相談する
  2. 私物化しない

View/Context Bounds の制約

わー遅刻だ遅刻だ。

View/Context Bounds は便利な型制約ですが、制約自身に制約があるというめんどくさいことになっています。

例えば以下のコードは formed です。

abstract class A[T : Manifest]

しかし以下のコードは ill-formed です。

trait A[T :  Manifest]

abstract member type を使っても ill-formed です。

trait A { type T : Manifest }

これは View/Context Bounds が実際にどのように実装されているかを考えれば理由は明白で、trait の場合 implicit parameter を置くべき場所がないためです。abstract class もダメそうに見えますが、abstract class の場合にはコンストラクタに implicit parameter が付くので大丈夫です。

  abstract class $read$$iw$$iw$A extends java.lang.Object with ScalaObject {
    def this(implicit evidence$1: scala.reflect.Manifest): $line1.$read$$iw$$iw$A = {
      $read$$iw$$iw$A.super.this();
      ()
    }
  };

まあ通常は型パラメタ使ってる場所で適当に implicit parameter 書けばいいわけです。そういうの嫌だっていう人は Scala 3 をお待ちください

というのは冗談で Scala 3 って言いたかっただけです。おしまい。

追記:invalid じゃなくて ill-formed なの?と思った人へ。本当に ill-formed です。Syntax として書けないことになっています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1