Boyutu belirtmek zorunda kalmadan bir tuple
eşleştirmenin bir yolu var mı? Bir tupleScala'da bilinmeyen boyutta bir tuple eşleştirin
val v = ("Dr", "John","H", "Watson")
olsaydı Örneğin, böyle bir şey yapabilmek istiyorum
: Bu derleme değil
v match {
case ("Dr", : _*) => "What's up, Doc?"
case ("Mr", name, :_*) => s"Welcome, Mr. ${name}"
case _ => "Have we met?"
}
, :_*
normalde parametrelerin belirsiz sayıda anlamına gelir ama Bu durumda görünüşte kullanılamaz. Bu izleyici, 2'den büyük herhangi bir tuple için kullanabilmekti. v
'u List
(örneğin) dönüştürmek için yapabileceğimi biliyorum, sadece bir tuple
ile yapmanın mümkün olup olmadığını bilmek istiyorum.
DÜZENLEME: Web'de bulunan en bilgilerin geri scala 2.8 kadar uzanır ki, this discussion, bu yüzden 'Hayır, olamaz' cevap vereceğim.
Bildiğim kadarıyla, hiçbir yol yoktur, çünkü farklı büyüklükteki tupllar farklı tiplerdir. Ancak makrolarla yapılabilir - amaç tüm olası boyutlara uyacak kod üretmektir. Ya da önerdiğiniz gibi, örtülü dönüşümleri "Seq [Any]" olarak tanımlayın. Bu da kirli bir çözümdür ve kendinize sormanız daha iyi olur, sorunlarınızda kullanmak için doğru tipler mi? Belki de değiller. –
@SargeBorsch ama hepsi Ürün'ü uzatır ;-) –
@ om-nom-nom Evet, bu doğrudur, ancak Ürün türünüz varsa, öğelerinin türlerini bilmiyorsunuz ve bu nedenle verilerinize güvenli bir şekilde erişimini kaybediyorsunuz (gereksiniminiz var) öğelerinin türlerini el ile kontrol etmek/dökmek için) –