क्या संकलन समय पर एक विधि में Vector
के आकार को लागू करना संभव है? मैं अंतरिक्ष कि कुछ इस तरह दिखता में अंक का एक संग्रह का उपयोग कर एक n आयामी इयूक्लिडियन स्थान मॉडल करने के लिए (यह क्या मैं अब है) हैं:स्कैला - संकलन समय पर वेक्टर का आकार लागू करना
case class EuclideanPoint(coordinates: Vector[Double]) {
def distanceTo(desination: EuclieanPoint): Double = ???
}
अगर मैं एक समन्वय कि EuclideanPoint(Vector(1, 0, 0))
के माध्यम से बनाया जाता है, यह एक 3 डी यूक्लिडियन बिंदु है। यह देखते हुए, मैं यह सुनिश्चित करना चाहता हूं कि distanceTo
पर कॉल में पारित गंतव्य बिंदु एक ही आयाम का है।
मैं जानता हूँ कि मैं Tuple22
को Tuple1
उपयोग करके ऐसा कर सकते हैं, लेकिन मैं कई अलग अलग ज्यामितीय रिक्त स्थान का प्रतिनिधित्व करना चाहते हैं और मैं एक अंतरिक्ष के लिए 22 वर्गों लेखन किया जाएगा अगर मैं इसे Tuple
रों के साथ किया था - वहाँ एक बेहतर तरीका है?
मैं अच्छे चेतना में यह _answer_ नहीं बना सकता, लेकिन यह एक विचार के रूप में योग्य हो सकता है ... मेरे लिए पहली बात यह है कि पथ-निर्भर प्रकारों के साथ एक मूल्य वर्ग (2.10 में नया) गठबंधन करना है एक प्रकार जो एस विशिष्ट पूर्णांक का प्रतिनिधित्व करता है। मुझे कोई वास्तविक विचार नहीं है कि यह काम करने के लिए किया जा सकता है या नहीं। जब मैं दिन के लिए काम खत्म हो जाता हूं तो मैं इसे आज़मा सकता हूं ... एसआईपी 15 देखें: http://docs.scala-lang.org/overviews/core/value-classes.html –
इस प्रकार की बाधा को एन्कोड किया जा सकता है "टाइप-स्तरीय प्रोग्रामिंग"। उदाहरण के लिए, [Apocalisp ब्लॉग श्रृंखला] देखें (http://apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/), और विशेष रूप से एचएलआईस्ट। –