Tôi xé tóc của tôi ra cố gắng tìm ra cách để làm như sau:Sử dụng varargs từ Scala
def foo(msf: String, o: Any, os: Any*) = {
println(String.format(msf, o :: List(os:_*)))
}
Có một lý do tại sao tôi phải khai báo các phương thức với một o
và một os
Seq
riêng. Về cơ bản, tôi kết thúc với phương thức định dạng được gọi với một tham số đối tượng đơn (thuộc loại List
). Cố gắng:
def foo(msf: String, o: Any, os: Any*) = {
println(String.format(msf, (o :: List(os:_*))).toArray)
}
Cung cấp cho tôi những lỗi loại: đúc
found: Array[Any]
required Seq[java.lang.Object]
tôi đã cố gắng, mà biên dịch nhưng không vì khá nhiều lý do tương tự như ví dụ đầu tiên. Khi tôi cố gắng
println(String.format(msg, (o :: List(os:_*)) :_*))
này thất bại trong việc biên soạn với sự mơ hồ ngầm chuyển đổi (any2ArrowAssoc
và any2stringadd
)
Nó biên dịch nhưng giảm hơn khi chạy: Exception in thread "main" java.lang.ClassCastException:. $ Ruột $ ruột scala không thể được đúc để scala.runtime.BoxedObjectArray \t tại scala.runtime.RichString .format (RichString.scala: 242) –
Ngoài ra, toList đến từ đâu? –
Đã sửa lỗi, nó hoạt động ngay bây giờ. Tôi đang gửi một báo cáo lỗi - Scala không nên có ClassCastExceptions ngoại trừ khi bạn đã sử dụng asInstanceOf. toList là một phương pháp trên Iterable [A] –