Scalaの隠れた機能 質問する

Scalaの隠れた機能 質問する

すべての Scala 開発者が知っておくべき Scala の隠れた機能は何ですか?

回答ごとに隠し機能を 1 つ教えてください。

ベストアンサー1

さて、もう 1 つ追加する必要がありました。ScalaRegexのすべてのオブジェクトには、一致グループにアクセスできる抽出子 (上記の oxbox_lakes の回答を参照) があります。したがって、次のようにすることができます。

// Regex to split a date in the format Y/M/D.
val regex = "(\\d+)/(\\d+)/(\\d+)".r
val regex(year, month, day) = "2010/1/13"

パターン マッチングと抽出器の使用に慣れていない場合、2 行目はわかりにくいかもしれません。 または を定義するときは常にvalvarキーワードの後に​​来るのは単なる識別子ではなくパターンです。これが機能する理由です。

val (a, b, c) = (1, 3.14159, "Hello, world")

右側の式は、Tuple3[Int, Double, String]パターン に一致する を作成します(a, b, c)

ほとんどの場合、パターンはシングルトンオブジェクトのメンバーである抽出子を使用します。たとえば、次のようなパターンを書いたとします。

Some(value)

すると、暗黙的に抽出子が呼び出されますSome.unapply

ただし、パターン内でクラス インスタンスを使用することもできます。ここではそれが起こっています。 val 正規表現は のインスタンスでありRegex、パターン内で使用すると、暗黙的に を呼び出しますregex.unapplySeq(unapplyと はunapplySeqこの回答の範囲外です)。これにより、一致グループが に抽出されSeq[String]、 の要素が変数 year、month、day に順番に割り当てられます。

おすすめ記事