क्या स्केल के प्रकार-सिस्टम का उपयोग करने के लिए एक पूर्ण ऑब्जेक्ट ग्राफ़ के संदर्भ-प्रासंगिक सबग्राफ को संक्षेप में निर्दिष्ट करने का कोई तरीका है?स्कैला किसी ऑब्जेक्ट ग्राफ़ को बाधित कर सकता है ताकि संदर्भ के लिए प्रासंगिक केवल वे वस्तुएं दिखाई दे सकें?
डीसीआई का तर्क है कि आपके पास अक्सर एक जटिल जटिल ग्राफ ग्राफ होता है लेकिन किसी भी एक प्रयोग-मामले में आप अक्सर उप-ग्राफ के साथ काम करना चाहते हैं। आपके पास Foo
है जिसमें Bar
और Bat
है, लेकिन जब आप उपयोग-मामले 1 में हैं, तो आप केवल Bar
पर ध्यान देते हैं और जब उपयोग-मामले 2 में, केवल Bat
के बारे में।
उदाहरण के लिए, मान लीजिए कि आप इस संरचना है, और Role1 यूज-केस Foo->Bar->Baz->Bin
की आवश्यकता है और Role2 का उपयोग-केस Foo->Bat->Baz->Buz
की आवश्यकता है:
class Foo{
val bar = new Bar() //Only relevant to Role 1
val bat = new Bat() //Only relevant to Role 2
}
class Bar {
val baz = new Baz()
}
class Bat {
val baz = new Baz()
}
//Relevant to both Role 1 and 2 (via Bar or Bat)
class Baz {
val bin = new Bin() //Only relevant to Role 1
val buz = new Buz() //Only relevant to Role 2
}
class Bin{}
class Buz{}
यह देखना चाहते हैं कि आप एक में पहुँच विवश कर सकते हैं आसान है एकल वर्ग लक्षण का उपयोग करके:
trait FooInRole1 { def bar : Bar } //Define accessor in trait
s/Foo/Foo extends FooInRole1/ //Change Foo's declaration to implement trait
val f : FooInRole1 = new Foo //LHS is i'face, RHS is implementation
//f.bat <--Compile error Irrelevant field is not available. \o/
लेकिन आप हर के लिए इस पद्धति को दोहराना use- के लिए प्रासंगिक आपत्ति मामला। (उदाहरण के लिए, आप bin
पहुँचने के लिए एक BazInRole1
की जरूरत है और एक BazInRole2
biz
तक पहुँचने के लिए)
मेरा प्रश्न किसी तरह इन सभी आसानी से मिल-गलत, नाम स्थान-भीड़ लक्षण लेखन से बचने के लिए है कि क्या वहाँ है। उदाहरण के लिए, मैं इस कोड की तरह कुछ कल्पना कर सकता है (जो संकलन नहीं करता है):
class Foo[T] {
T match {
case r1 : Role1 => def bar : Bar[T]
case r2 : Role2 => def bat : Bat[T]
case _ => //Nothing
}
}
val fInRole1 = new Foo[Role1] //Provides Foo->Bar->Baz->Bin
val fInRole2 = new Foo[Role2] //Provides Foo->Bat->Baz->Buz
यह स्काला के प्रकार प्रणाली की तरह लगता है काफी अर्थपूर्ण इस तरह कुछ करने के लिए है, लेकिन मैं इसे समझ नहीं कर सकते हैं।
मुझे लगता है कि इस प्रकार कुछ प्रकार के वर्गों के साथ हासिल किया जा सकता है। ऑब्जेक्ट ग्राफ़ पर टाइप-क्लास को दृश्य बनाएं और केवल टाइप-क्लास के माध्यम से इसकी सामग्री को एक्सेस करें और उसका उपयोग करें। – ziggystar