2012-12-08 9 views
5

मुझे Predef.any2stringadd के साथ समस्या है जो दुर्भाग्य से officially considered not a PITA है। मैं सेवाष्पशील Predef.any2stringadd दुभाषिया

trait Foo { 
    def +(that: Foo): Foo 
} 

एक प्रकार वर्ग दृष्टिकोण

object Foo { 
    implicit def fooOps(f: Foo): Ops = new Ops(f) 
    final class Ops(f: Foo) { 
     def +(that: Foo): Foo = ??? 
    } 
} 
trait Foo 

करने के लिए अपने एपीआई बदल अब मैं में है कि भयानक विधि संकलित कोड इस तरह छुपा सकते हैं:

import Predef.{any2stringadd => _} 

बहरहाल, यह विफल रहता है मेरे आरईपीएल/दुभाषिया पर्यावरण में।

val in = new IMain(settings, out) 
in.addImports("Predef.{any2stringadd => _}") // has no effect? 

मैं इस कष्टप्रद विधि को वाष्पीकरण करने के लिए दुभाषिया को कैसे बता सकता हूं? मुझे नहीं पता जबकि

object Foo { 
// implicit def fooOps(f: Foo): Ops = new Ops(f) 
    final class Ops(f: Foo) { 
     def +(that: Foo): Foo = ??? 
    } 
} 
trait Foo 
implicit def fooOps(f: Foo): Foo.Ops = new Foo.Ops(f) 

:

उत्तर

1

का संभावित हल Foo के साथी वस्तु से बाहर निहित रूपांतरण लेते हैं, और (मेरा असली मामले में पैकेज वस्तु) शीर्ष वरीयता क्रम में यह जगह करने के लिए हो रहा है पता है कि इससे कोई फर्क क्यों पड़ता है, ऐसा लगता है कि दुभाषिया को any2stringadd भूलने के लिए पर्याप्त है।

(फिर भी, मुझे लगता है कि उस विधि को हटाने के प्रयास में एक नया टिकट खोला जाना चाहिए, यह भी दिया गया है कि स्कैला 2.10 में स्ट्रिंग इंटरपोलेशन इसे और अधिक आवश्यक बना देगा।)

संबंधित मुद्दे