引数として a を取得し、これを val メンバーとしてSeq[_]不変のクラス インスタンスを返す関数があります。Seqが変更可能である場合Seq、戻りクラスのインスタンスを変更できないことを保証するために、防御的なコピーを作成したいのは明らかです。
このパターンのベスト プラクティスは何ですか? まず、関数をオーバーロードできないことに驚きました
def fnc(arg: immutable.Seq[_]) = ...
def fnc(arg: mutable.Seq[_]) = ...
パターンマッチもできます:
def fnc(arg: Seq[_]) = arg match {
case s: immutable.Seq[_] => { println("immutable"); s}
case s: mutable.Seq[_] => {println("mutable"); List()++s }
case _: ?
}
しかし、私はその_ケースについて確信が持てません。argまたは であることが保証されていますimmutable.Seqかmutable.Seq? List()++sまた、それを変換する正しい方法であるかどうかもわかりません。SOに関する多くの投稿を見ましたが、それらのほとんどは2.8以前のものです。
Scala-Collections は「インテリジェント」で、いつでも (パターン マッチングなしで) 書き込みList()++s、不変の場合は同じインスタンスを取得し、可変の場合はディープ コピーを取得できますか?
これを行うための推奨される方法は何ですか?