2016-01-20 7 views
5

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

उदाहरण के लिए मैं a gt b लिखता हूं जहां gtscalaz से आता है। और मैं जानना चाहता हूँ:

  1. वास्तव में क्या Order की अंतर्निहित उदाहरण इस्तेमाल किया गया था
  2. (मैं इस विशेष उदाहरण में जवाब पता क्या typeclass इस्तेमाल किया गया था - यह scalaz में आसान नहीं हमेशा है, लेकिन सामान्य रूप में कभी कभी यह है कि स्पष्ट)
  3. पूरे श्रृंखला कैसे a को एक विधि gt प्राप्त हुई। इस विशेष उदाहरण के लिए, मुझे पता है कि ToOrderOps विशेषता का उपयोग किया गया था, लेकिन आम तौर पर मुझे यह नहीं पता हो सकता है और मैं यह भी नहीं समझ सकता कि ToOrderOps आयात किया गया था।
+0

@ स्टू के पिछले [उत्तर] (http://stackoverflow.com/a/34735993/409976) पर देख रहे हैं, शायद आप [reify] (https://gist.github.com/kevinmeredith/396cea7839fababa7e2a) चाहते हैं? –

उत्तर

18

एक अच्छा तरीका है का उपयोग करते हुए आरईपीएल में स्काला प्रतिबिंब एपीआई आमतौर पर है जांच के इस प्रकार शुरू करने के लिए:

scala> import scala.reflect.runtime.universe.reify 
import scala.reflect.runtime.universe.reify 

scala> import scalaz._, Scalaz._ 
import scalaz._ 
import Scalaz._ 

scala> println(reify(1 gt 2)) 
Expr[Boolean](Scalaz.ToOrderOps(1)(Scalaz.intInstance).gt(2)) 

scala> println(reify("a" gt "b")) 
Expr[Boolean](Scalaz.ToOrderOps("a")(Scalaz.stringInstance).gt("b")) 

यहाँ ToOrderOps एक विधि, नहीं विशेषता है, और Scalaz इंगित करता है कि आप इसे देख रहे हैं क्योंकि scalaz.ScalazToOrderOps विशेषता में मिश्रित है, इसलिए मुझे लगता है कि यह दृष्टिकोण आपके सभी तीन बिंदुओं को संबोधित करता है।

+8

मैं बस उल्लेख करना चाहता था कि आप कितने भयानक हैं। धन्यवाद! :) – Archeg

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