से उपयोग करना varargs मैं निम्न कार्य पूरे करने पता लगाने की कोशिश बाहर मेरे बाल फाड़ कर रहा हूँ:स्काला
def foo(msf: String, o: Any, os: Any*) = {
println(String.format(msf, o :: List(os:_*)))
}
एक कारण है कि मैं एक o
और एक os
Seq
अलग से प्रणाली की घोषणा करने के लिए है नहीं है। असल में, मैं एक ऑब्जेक्ट पैरामीटर के साथ प्रारूप प्रारूप के साथ समाप्त होता हूं (प्रकार List
)। प्रयास कर रहा है:
found: Array[Any]
required Seq[java.lang.Object]
मैं कोशिश की है कास्टिंग, जो संकलित लेकिन पहले उदाहरण के रूप में काफी इसी कारण विफल रहता है:
def foo(msf: String, o: Any, os: Any*) = {
println(String.format(msf, (o :: List(os:_*))).toArray)
}
मुझे प्रकार की त्रुटि देता है। जब मैं
println(String.format(msg, (o :: List(os:_*)) :_*))
कोशिश यह अंतर्निहित रूपांतरण अस्पष्टता (any2ArrowAssoc
और any2stringadd
)
यह कम्पाइल लेकिन रनटाइम पर अधिक पड़ता है: सूत्र में अपवाद "मुख्य" java.lang.ClassCastException:। स्केला $ बृहदान्त्र $ बृहदान्त्र \t scala.runtime.RichString पर scala.runtime.BoxedObjectArray में ढाला नहीं जा सकता .format (RichString.scala: 242) –
इसके अलावा, कहां से आती है? –
फिक्स्ड, यह अब काम करता है। मैं एक बग रिपोर्ट दर्ज कर रहा हूं - स्केल को क्लासकास्ट अपवाद नहीं होना चाहिए, सिवाय इसके कि आपने इंस्टेंसऑफ के रूप में उपयोग किया है। toList Iterable पर एक विधि [एक] –