मेरे पास एक कक्षा है जहां मैं id
विशेषता पर स्ट्रिंग ओवरलोडिंग लागू करना चाहता हूं। हालांकि, मूस विशेषता एक्सेसर्स पर स्ट्रिंग ओवरलोडिंग की अनुमति नहीं देता है। उदाहरण के लिए:मूस विशेषता एक्सेसर पर ओवरलोड को स्ट्रिंग करने का सबसे अच्छा तरीका क्या है?
package Foo;
use Moose;
use overload '""' => \&id, fallback => 1;
has 'id' => (
is => 'ro',
isa => 'Int',
default => 5,
);
package main;
my $foo = Foo->new;
print "$foo\n";
ऊपर एक त्रुटि दे देंगे:
You are overwriting a locally defined method (id) with an accessor at C:/perl/site/lib/Moose/Meta/Attribute.pm line 927
मैं विकल्पों में से एक जोड़े की कोशिश की है इस के आसपास पाने के लिए:
id
is => bare
अंकन, और यह जगह मेरे अपने एक्सेसर के साथ:sub id {$_[0]->{id}}
। लेकिन यह सिर्फ एक हैक है।स्ट्रिंग ओवरलोडर एक और विधि का उपयोग करते हैं जो सिर्फ आईडी पर वापस भेजता है:
sub to_string {$_[0]->id}
।
मैं सोच रहा हूं कि किसी के पास ऐसा करने का बेहतर तरीका है या नहीं?
अनिवार्य विकल्प 2 है जहाँ से
छोटे वाक्यविन्यास में सवाल से। मैं यह नहीं कह रहा कि यह बुरा है लेकिन यह जानना दिलचस्प होगा कि सवाल से पहला दृष्टिकोण क्यों विफल रहता है। – musiKk
छोटा वाक्यविन्यास थोड़ा क्लीनर है। 3 तर्क मुद्दे के साथ, मुझे लगता है कि यह जाने का रास्ता होना चाहिए। – stevenl