web-dev-qa-db-ja.com

ScalaでStringの代わりにStringLikeを使用しますか?

ScalaにはStringLike特性があります。ケースクラスNameを作成し、内部的には名前をいくつかの文字で保存するとします。 case class Name(name: StringLike)またはcase class Name(name: String)を使用する必要がありますか?

前者は明らかにより抽象的なです。これは、誰かがCustomStringを拡張するStringLikeを私に与えることができ、いくつかのメソッドを上書きする可能性があることを意味します。

与えられた引数がStringクラスのように動作することを確認したい場合は、Stringを使用し、それ以外の場合はStringLikeを使用する必要があります。あれは正しいですか?それが実質的に違いを生む場合はありますか?

また、Stringではできない、より専門的なStringLikeでできることはありますか?

6
valenterry

通常、可能な限り引数の要約として受け入れることをお勧めしますが、Scalaでは、通常、[Repr]パラメーターを持つ型を直接使用することは避けたいと考えています。標準ライブラリの実装者。

これは特にStringLikeに当てはまります。これは、主にa Java Stringを拡張して、キャラクターのコレクションのように機能できるようにすることを目的としています。カーテンの後ろにいる男を見ることは想定されていません。それがどのように達成されるかを見てください。また、誰かがカスタムStringLike実装を作成することも期待されていません。

Stringは、単純な読みやすさの観点からもはるかに優れています。 Stringのように動作するものが必要な場合は、Stringを使用してください。非常にまれな機会では、Stringのようなものが必要になることもありますが、実際には変更できないため、より良い解決策があるかもしれません。

8
Karl Bielefeldt