मैं डी के लिए एक गतिशील टाइपिंग लाइब्रेरी लागू कर रहा था जब मैं एक रोचक समस्या से भाग गया।डी में गतिशील टाइपिंग का उपयोग करना, एक स्थिर टाइप की गई भाषा
अभी, मैं dynamic()
नामक फ़ंक्शन बनाने में सफल रहा हूं जो किसी ऑब्जेक्ट का गतिशील संस्करण देता है।
उदाहरण के लिए:
import std.stdio, std.dynamic.core;
class Foo
{
string bar(string a) { return a ~ "OMG"; }
int opUnary(string s)() if (s == "-") { return 0; }
}
void main(string[] argv)
{
Dynamic d = dynamic(new Foo());
Dynamic result = d.bar("hi");
writeln(result); // Uh-oh
}
समस्या मैं के पार चला गया है तथ्य यह है कि writeln
उपयोग करने के लिए संकलन समय प्रतिबिंब यह पता लगाने result
के इलाज के लिए कैसे करने के लिए प्रयास करता है।
यह पहली चीज है जो कोशिश करता है? isInputRange!(typeof(result))
समस्या यह है कि यह सच देता है! क्यूं कर? क्योंकि मुझे यह मानना है कि सभी सदस्यों को इसकी आवश्यकता है, जब तक कि मैं रन समय पर अन्यथा साबित नहीं कर सकता - जो बहुत देर हो चुकी है। तो कार्यक्रम front
, popFront
, और empty
पर result
पर कॉल करने का प्रयास करता है, जो मेरे प्रोग्राम को दुर्घटनाग्रस्त करता है।
मैं इसे ठीक करने का कोई तरीका नहीं सोच सकता। क्या किसी को कुछ पता है?
'std.variant' मनमाना क्षेत्रों होने प्रकार का समर्थन नहीं करता। –
@cyber आपका क्या मतलब है? –
ओपी एक ऑब्जेक्ट बनाना चाहता है जहां 'obj.anything' संकलन-समय पर मान्य है (भले ही यह रन-टाइम पर मान्य न हो)। जैसा कि मैंने देखा है, 'std.variant' में कुछ भी ऐसा नहीं करता है। –