すべての 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 行目はわかりにくいかもしれません。 または を定義するときは常にval
、var
キーワードの後に来るのは単なる識別子ではなくパターンです。これが機能する理由です。
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 に順番に割り当てられます。