باستخدام varargs من سكالا
-
06-07-2019 - |
سؤال
أنا تمزيق شعري في محاولة لمعرفة كيفية القيام بما يلي:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, o :: List(os:_*)) )
}
هناك سبب لماذا يجب أن تعلن الأسلوب مع o
و os
Seq
بشكل منفصل.أساسا أنا في نهاية المطاف مع شكل طريقة تسمى مع كائن واحد المعلمة (من نوع List
).محاولة:
def foo(msf: String, o: Any, os: Any*) = {
println( String.format(msf, (o :: List(os:_*))).toArray )
}
يعطيني نوع الخطأ:
وجدت:مجموعة[أي]
مطلوب Seq[جافا.لانغ.كائن]
لقد حاولت الصب ، الذي يجمع ولكن فشل الى حد كبير نفس السبب كما في المثال الأول.عندما أحاول
println(String.format(msg, (o :: List(os:_*)) :_* ))
هذا فشل في ترجمة مع التحويل الضمني الغموض (any2ArrowAssoc
و any2stringadd
)
المحلول
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( String.format(msf, (o :: os.toList).toArray : _* ))
نصائح أخرى
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( String.format(msf, o :: os.toList : _* ) )
أو
def foo(msf: String, o: AnyRef, os: AnyRef*) =
println( msf format (o :: os.toList : _* ) )
أنا أفضل بكثير الأخيرة, على الرغم من أنه لا يوجد لديه لغة* الدعم.
- سكالا 2.8 لا يكون لغة مع دعم RichString تنسيق.
لا تنتمي إلى StackOverflow