「4.9. 交差型」(2012/09/10 (月) 09:30:27) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*[[4. 型と値と変数]]
**[[4.1. 型と変数の種類]]
**[[4.2. プリミティブ型と値]]
**[[4.3. 参照型と値]]
**[[4.4. 型変数]]
**[[4.5. 引数付き型]]
**[[4.6. 型の抹消]]
**[[4.7. 具象可能型]]
**[[4.8. 未加工型]]
**4.9. 交差型
交差型(intersection type)はT&sub(){1} & ... & T&sub(){n}(n > 0)の形式をとります。ここでT&sub(){i} (1 ≦ i ≦ n)は型式です。
交差型は[[捕捉変換>5.10. 捕捉変換]]や[[型推論>15.12.2.7. 実引数による型実引数の推論]]の処理中に生じます。プログラムの一部として交差型を直接書くことはできません。これに対する文法はありません。
交差型の値は1≦i≦nに対する全ての型T&sub(){i}の値であるオブジェクトです。
交差型T&sub(){1} & ... & T&sub(){n}は以下の通り決定されます。:
-&bold(){各T&sub(){i}(1≦i≦n)に対し、T&sub(){i} <: C&sub(){i}である最も特殊なクラスもしくは配列をC&sub(){i}とします。その時、任意のi(1≦i≦n)に対しC&sub(){k} <: C&sub(){i}であるようなT&sub(){k} <: C&sub(){k}が存在します。なければコンパイル時にエラーとなります。}
-1≦j≦nに対し、もしT&sub(){j}が型変数ならば、T&sub(){j}'をT&sub(){j}のpublicメンバーと同じメンバーのインタフェースとします。そうではなく、もしT&sub(){j}がインタフェースならば、T&sub(){j}'はT&sub(){j}とします。
-その時、交差型は交差型が現れる同じパッケージ内で宣言された本体のない[[クラス型>8. クラス]]と直接スーパークラスC&sub(){k}と直接スーパーインタフェースT&sub(){1}'& ... &T&sub(){n}'と同じメンバーを持ちます。
&i(){&small(){交差型と型変数の制限の間の区別について詳しく記述する価値があります。全ての型変数の制限は交差型を誘導します。この交差型はしばしば取るに足りません(すなわち、単一の型からなります)。制限の形式は生じる特定の面倒な状況を排除するために制限されます(最初の要素だけはクラスや型変数である場合があり、ただ一つの型変数が制限の中に現れるかもしれません)。しかしながら、捕捉変換は制限がよりジェネラルな(例えば配列)型変数の作成する結果につながることができます。}}
**[[4.10. 型の派生]]
**[[4.11. 型の使用箇所]]
**[[4.12. 変数]]
*[[4. 型と値と変数]]
**[[4.1. 型と変数の種類]]
**[[4.2. プリミティブ型と値]]
**[[4.3. 参照型と値]]
**[[4.4. 型変数]]
**[[4.5. 引数付き型]]
**[[4.6. 型の抹消]]
**[[4.7. 具象可能型]]
**[[4.8. 未加工型]]
**4.9. 交差型
交差型(intersection type)はT&sub(){1} & ... & T&sub(){n}(n > 0)の形式をとります。ここでT&sub(){i} (1 ≦ i ≦ n)は型式です。
交差型は[[捕捉変換>5.10. 捕捉変換]]や[[型推論>15.12.2.7. 実引数による型実引数の推論]]の処理中に生じます。プログラムの一部として交差型を直接書くことはできません。これに対する文法はありません。
交差型の値は1≦i≦nに対する全ての型T&sub(){i}の値であるオブジェクトです。
交差型T&sub(){1} & ... & T&sub(){n}は以下の通り決定されます。:
-&bold(){各T&sub(){i}(1≦i≦n)に対し、T&sub(){i} <: C&sub(){i}である最も特殊なクラスもしくは配列をC&sub(){i}とします。その時、任意のi(1≦i≦n)に対しC&sub(){k} <: C&sub(){i}であるようなT&sub(){k} <: C&sub(){k}が存在します。なければコンパイル時にエラーとなります。}
-1≦j≦nに対し、もしT&sub(){j}が型変数ならば、T&sub(){j}'をT&sub(){j}のpublicメンバーと同じメンバーのインタフェースとします。そうではなく、もしT&sub(){j}がインタフェースならば、T&sub(){j}'はT&sub(){j}とします。
-その時、交差型は交差型が現れる同じパッケージ内で宣言された本体のない[[クラス型>8. クラス]]と直接スーパークラスC&sub(){k}と直接スーパーインタフェースT&sub(){1}'& ... &T&sub(){n}'と同じメンバーを持ちます。
&i(){&small(){交差型と型変数の制限の間の区別について詳しく記述する価値があります。全ての型変数の制限は交差型を誘導します。この交差型はしばしば取るに足りません(すなわち、単一の型からなります)。制限の形式は生じる特定の面倒な状況を排除するために制限されます(最初の要素だけはクラスや型変数である場合があり、ただ一つの型変数が制限の中に現れるかもしれません)。しかしながら、捕捉変換は制限がよりジェネラルな(例えば配列)型変数の作成する結果につながることができます。}}
**[[4.10. サブタイプ化]]
**[[4.11. 型の使用箇所]]
**[[4.12. 変数]]
表示オプション
横に並べて表示:
変化行の前後のみ表示: