سؤال

أنا تمزيق شعري في محاولة لمعرفة كيفية القيام بما يلي:

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 تنسيق.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top