1. ホーム
  2. scala

[解決済み] Scalaの''って何?

2022-03-09 17:05:10

質問

勉強中です Scala 使用 IntelliJ IDEです。

クラスをサブスクライブすると Element をオーバーライドして contents メソッドに対して、IDEはデフォルトの実装を提供しました。 contents メソッドを定義し ???

以下、書籍に掲載されているコード Programming in Scala, 3rd edition

エレメント

abstract class Element {
  def contents: Array[String]

  def height = contents.length

  def width = if (height == 0) 0 else contents(0).length
}

ArrayElement

class ArrayElement(cont: Array[String]) extends Element {
  override def contents: Array[String] = ??? // impl provided by IDE
}

プログラムの実行には問題がないのですが、メソッドにアクセスすると以下のような例外が発生します。

Exception in thread "main" scala.NotImplementedError: an implementation is missing
    at scala.Predef$.$qmark$qmark$qmark(Predef.scala:284)
    at org.saravana.scala.ArrayElement.contents(ScalaTest.scala:65)

とは何か、誰か説明してください。 ??? とその使い方を教えてください。

解決方法は?

??? はプレースホルダーとして設計されており、メソッドで定義された Predef (これはデフォルトで自動的にインポートされます)

その定義は次のとおりです。

def ??? : Nothing = throw new NotImplementedError

そのため、戻り値の型は Nothing を投げるだけです。 NotImplementedError . この定義により、定義したがまだ実装していないけれどもプログラムをコンパイルできるようにしたいメソッドのプレースホルダー実装として使用することができます。

Nothing はすべての型のサブタイプであり、そのため ??? は、どのような型が想定されていても有効な実装です。