2012-06-07 9 views
5
नामित एक्स

बस एक गतिशील वस्तु को लागू क्षेत्र (का उपयोग कर 2.10.0-एम 3):स्काला गतिशील

import language.dynamics 
object D extends Dynamic { 
    def selectDynamic(field : String) = Symbol(field) 
} 

निम्नलिखित ठीक काम करता है और उम्मीद

object DynamicTest extends App { 
    println(D.a) 
} 

मुद्रण 'एक

के रूप में लेकिन, अगर मैं इसे आजमाता हूं:

object DynamicTest extends App { 
    println(D.x) 
} 

मुझे ग़लत त्रुटियां मिलती हैं:

[error] DynProb.scala:7: type mismatch; 
[error] found : D.type 
[error] required: ?{val x: ?} 
[error] Note that implicit conversions are not applicable because they are ambiguous: 
[error] both method any2Ensuring in object Predef of type [A](x: A)Ensuring[A] 
[error] and method any2ArrowAssoc in object Predef of type [A](x: A)ArrowAssoc[A] 
[error] are possible conversion functions from D.type to ?{val x: ?} 
[error]  println(D.x) 
[error]   ^
[error] one error found 

एक्स इतना खास क्यों है? मैं कुछ बेवकूफ कर रहा हूँ?

+1

यह समस्या है: https://github.com/scala/scala/blob/master/src/library/scala/Predef.scala#L271 – Debilski

+0

तो, मुझे अनिवार्य रूप से तब तक इसके साथ रहना होगा जब तक कि चीज़ वास्तव में हटाई न जाए lib से, सिर्फ बहिष्कृत नहीं। शर्म की बात है। सूचक के लिए धन्यवाद :-) – hughleat

+0

यहां एक विचार है: यह मानते हुए कि गतिशील पहले चुनिंदा गतिशील आदि का प्रयास करने से पहले दायरे में उपयुक्त नाम ढूंढने का प्रयास करता है। क्या इसे बहिष्कृत नामों से भी बचा जाना चाहिए? – hughleat

उत्तर

0

मैं अब के लिए एक सरल उपाय के साथ आया था:

import language.dynamics 
object D extends Dynamic { 
    def selectDynamic(field : String) = Symbol(field) 
    def x = selectDynamic("x") 
} 
D.x 

रिटर्न की उम्मीद

res2: Symbol = 'x 

मैं CompleteDynamic नामित इस "एक्स" चर अधिभावी करने के लिए एक विशेषता को फिर से परिभाषित करने के लिए प्यार किया है, लेकिन मैं इस पल के लिए नहीं कर सका।