引数として 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
、不変の場合は同じインスタンスを取得し、可変の場合はディープ コピーを取得できますか?
これを行うための推奨される方法は何ですか?