2013-03-23 5 views
7

क्या प्रतिलिपि से एक अंतर्निहित आयात करना संभव है?स्कैला प्रतिलिपि से एक अंतर्निहित कैसे भेजा जा सकता है?

मैं इस तरह कुछ करना कहो,

scala> import scala.math.BigInt._ 
import scala.math.BigInt._ 

scala> :implicits 
/* 2 implicit members imported from scala.math.BigInt */ 
    /* 2 defined in scala.math.BigInt */ 
    implicit def int2bigInt(i: Int): scala.math.BigInt 
    implicit def long2bigInt(l: Long): scala.math.BigInt 

और फिर तय करते हैं कि यह सब एक बड़ी गलती थी। मैं वर्तमान दायरे से उन दोषों को कैसे हटा सकता हूं?

मेरी वर्तमान तकनीक आरईपीएल को निरस्त कर रही है और फिर एक नया शुरू कर रही है, मैं इसे दोहराने से बचने के लिए उत्सुक हूं।

उत्तर

10

आप एक ही नाम के साथ एक और निहित बनाकर एक निहितार्थ छुपा सकते हैं। सौभाग्य से (इस मामले के लिए, वैसे भी), ओवरलोडेड अंतर्निहित होने के बजाय, नया व्यक्ति पुराने को विस्थापित करता है:

scala> import language.implicitConversions 
import language.implicitConversions 

scala> def needsBoolean(b: Boolean) = !b 
needsBoolean: (b: Boolean)Boolean 

scala> implicit def int2bool(i: Int) = i==0 
int2bool: (i: Int)Boolean 

scala> val dangerous = needsBoolean(0) 
dangerous: Boolean = false 

scala> trait ThatWasABadIdea 
defined trait ThatWasABadIdea 

scala> implicit def int2bool(ack: ThatWasABadIdea) = ack 
int2bool: (ack: ThatWasABadIdea)ThatWasABadIdea 

scala> val safe = needsBoolean(0) 
<console>:14: error: type mismatch; 
found : Int(0) 
required: Boolean 
     val safe = needsBoolean(0) 
+0

हा। अच्छा लगा। मुझे लगता है कि इसका मतलब है कि असंभव नहीं है। एक विशेषता जोड़ने के बजाय मुझे 'implicit def int2bool = unit' –

+0

@DanMidwood के साथ लाभ के साथ मिल गया - आप शायद 'अंतर्निहित def int2bool =()' का मतलब है, हालांकि मेरा बिंदु वास्तव में _anything_ काम करता है। मैंने यह सुनिश्चित करने के लिए एक नई विशेषता बनाई है कि जो कुछ भी आपूर्ति की गई थी वह कहीं भी नहीं चाहती थी। ('= यूनिट 'का अर्थ है" साथी ऑब्जेक्ट को' यूनिट 'प्रकार पर वापस कर दें; अद्वितीय' यूनिट 'मान, '()' संभवतः कहीं कहीं चाहता था, लेकिन कम संभावना है कि साथी ऑब्जेक्ट चाहता था।) –

+0

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

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