scala - 型パラメータ - UnitとNothingの違いは何ですか?



scala this (2)

UnitNothing両方の型は、何も返さない関数を示します。 それらの違いは何ですか?

https://ffff65535.com


Petrの回答に1つの側面を追加するには:型階層で重要な役割を果たすNothingはありNothing 。 ボトムタイプです。 これは、他のすべての型のサブタイプであることを意味します。これは、 Anyの逆のようなもので、すべてのスーパータイプです。 あなたはhere素敵な説明を見つけることができます。


Unitは、ちょうど1つの値を持つタイプです - ユニットタイプを参照してください。 一方、 Nothing価値がありません - 下のタイプを参照してください。

何も返さない関数は戻り値の型Unit持たなければなりません。 それがNothing場合、関数は結果を返すことができませんでした。 関数を終了する唯一の方法は、例外によるものです。

別の方法ではNothingも使用されNothing 。 それは2つの特性によって特徴付けられる:

  1. 他のすべてのタイプのサブタイプ( Nullも含む)はありNothing
  2. このタイプのインスタンスは存在しません。

これはいつ便利ですか? 考慮しNone

object None extends Option[Nothing]

Optionは型パラメータで共変で、 Nothingはすべての型のサブタイプであるため、 Option[Nothing]はすべての型A Option[A]サブタイプです。 したがって、すべてのAに対してOption[A]サブタイプであるNoneオブジェクトを作成することができます。 Nothingはインスタンス化できないので、 Option[Nothing]は常に値なしであるため、これは合理的です。 同様に

object Nil extends List[Nothing]

Unitは論理真に対応し、 カリー・ハワード同型体系下ではNothingは論理偽に対応し、型を命題として、校正として機能する。





scala