ScalaにはStringLike特性があります。ケースクラスName
を作成し、内部的には名前をいくつかの文字で保存するとします。 case class Name(name: StringLike)
またはcase class Name(name: String)
を使用する必要がありますか?
前者は明らかにより抽象的なです。これは、誰かがCustomString
を拡張するStringLike
を私に与えることができ、いくつかのメソッドを上書きする可能性があることを意味します。
与えられた引数がString
クラスのように動作することを確認したい場合は、String
を使用し、それ以外の場合はStringLike
を使用する必要があります。あれは正しいですか?それが実質的に違いを生む場合はありますか?
また、String
ではできない、より専門的なStringLike
でできることはありますか?
通常、可能な限り引数の要約として受け入れることをお勧めしますが、Scalaでは、通常、[Repr]
パラメーターを持つ型を直接使用することは避けたいと考えています。標準ライブラリの実装者。
これは特にStringLike
に当てはまります。これは、主にa Java String
を拡張して、キャラクターのコレクションのように機能できるようにすることを目的としています。カーテンの後ろにいる男を見ることは想定されていません。それがどのように達成されるかを見てください。また、誰かがカスタムStringLike
実装を作成することも期待されていません。
String
は、単純な読みやすさの観点からもはるかに優れています。 String
のように動作するものが必要な場合は、String
を使用してください。非常にまれな機会では、String
のようなものが必要になることもありますが、実際には変更できないため、より良い解決策があるかもしれません。