サイズを指定することなく部分的にtuple
と一致する方法はありますか? 、これはコンパイルされませんスカラーで不明なサイズのタプルに一致する
v match {
case ("Dr", : _*) => "What's up, Doc?"
case ("Mr", name, :_*) => s"Welcome, Mr. ${name}"
case _ => "Have we met?"
}
:_*
は、通常、パラメータの不確定な数を意味するが、私はタプル
val v = ("Dr", "John","H", "Watson")
を持っている場合たとえば、私のような何かを行うことができるようにしたいのですがこの場合明らかに使用することはできません。考え方は、2より大きいタプルに対してこのマッチャーを使用できるようにすることです。 でそれを行うことができるかどうかを知りたい場合は、まずv
をList
に変換することができます。
EDIT:私は、ウェブ上で発見ほとんどの情報は、バックのScala 2.8にまでさかのぼりれ、this discussionあるので、私は「いいえ、することはできません」と答えてつもりです。
私が知る限り、サイズの異なるタプルは異なるタイプなので、方法はありません。しかし、それはマクロで行うことができます - 目的は、すべての可能なサイズに一致するコードを生成することです。あるいは、示唆したように、暗黙の変換を 'Seq [Any]'に定義してください。これはあまりにも汚い解決策であり、あなた自身に尋ねる方がいいでしょう。タプルはあなたの問題に使う正しいタイプですか?多分彼らはそうではないでしょう。 –
@SargeBorschしかし、それらすべてがProductを拡張します;-) –
@ om-nom-nomはい、それは本当ですが、あなたがProduct型を持っているなら、その要素の型を知らないので、データへの型付きのないアクセスを失います –