2011-11-30 23 views
5

Bir Option var:Scala: Bir Seçeneği varargs'a dönüştürebilir miyim?

val myOption: Option[Int] = fooBar() 

Ve varargs param götüren bir yöntem:

def myMethod(a: String, b: Int*) = {...} 

bir varargs param olarak yönteme seçeneği geçmesine herhangi bir yolu var mı? Yani, seçenek Some(3) ise 3'ü geçer ve None ise hiçbir şey iletmez.

myMethod("xyz", myOption: _*) 

ama derleyici bir Seq[Int] gerektirdiğini yakınır:

açıkça argüman yazarak çalıştı scala: How to pass an expanded list as varargs into a method? cevabını deneme. Option'un Seq uygulanmadığı ve önceden örtük bir dönüştürme yapılmadığı görülüyor.

Derleyicinin bir Seq istediği düşünüldüğünde, elbette myOption.toList: _*'u geçebilirim, ancak daha güzel bir yol var mı?

+0

Sizin yönteminiz bir "Seq" gerektirir? Daha genel toplama işlemleri ile yazabilirsiniz (ör: foreach, harita, filtre, vb.) – schmmd

+0

@schmmd Bu özel durumda, 'myMethod' bir üçüncü taraf kitaplığının parçasıdır, bu yüzden kullanmaktan başka çarem yok. varargs. Bu benim kendi kodumdu, muhtemelen 'Int * 'yerine' İterable '[Int]' yi almayı ve kendimi bu beladan kurtarmam için yeniden yazma yöntemini yeniden yazabilirim! –

cevap

5
myMethod("xyz", myOption.toSeq: _*) 
+1

“Option” nesnesinin “implicit def option2Iterable” yöntemi ile dahili olarak “myOption.toList” adını vereceğimi düşünür müsünüz? –

+0

@ChrisB Ouch! Kesinlikle haklısınız ... Evet, 'toList' daha iyidir. –

İlgili konular