Duration.new Int के साथ क्यों काम करता है लेकिन चूहा नहीं?


9

एक अवधि के लिए, मुझे हाथ से एक असली के लिए एक चूहा को मजबूर करने की आवश्यकता क्यों है, लेकिन इंट नहीं?

यह रकूडो वर्जन 2020.01 है जिसे MoarVM वर्जन 2020.01.1 पर बनाया गया है, जो पर्ल 6. डी को लागू कर रहा है। OSX पर।

say $v.WHAT; #(Int)
$v = Duration.new( $v );
say $v;     #20 

my $w = 20.0;
say $w.WHAT; #(Rat)
$w = Duration.new( $w.Real );
say $w;     #20 

my $x = 20.0;
say $x.WHAT; #(Rat)
$x = Duration.new( $x );
say $x;     #hangs

जवाबों:


10

यह एक बग है। जो https://github.com/rakudo/rakudo/commit/f70d95e299 के साथ तय किया गया है ।

Ratकिसी अन्य प्रकार की तुलना में अलग-अलग तरीके से कार्य करने का कारण यह है कि इस Ratमामले को किसी भी प्रकार का जोर-जबरदस्ती नहीं करने के लिए अनुकूलित किया गया था, और इस तरह से जोर-जबरदस्ती के परिणाम की जांच करने की आवश्यकता नहीं थी। उस स्थिति में, मूल्य सीधे नई Durationवस्तु में डाल दिया गया था । हालांकि, यह डी-कंटेनरिंग के बिना ऐसा किया था, इसलिए Durationऑब्जेक्ट वास्तव में $xआपके उदाहरण से चर को संदर्भित करेगा । यह सब आम तौर पर ठीक है, लेकिन .gistतर्क ने किसी तरह एक अनंत लूप बनाया जो Durationइस आत्म-संदर्भ के कारण प्रतिनिधित्व करने की कोशिश कर रहा है । मानना ​​चाहिए कि मैं वास्तव में जहां यह वास्तव में एक पाश में मिला पर ध्यान नहीं दिया।

वैसे भी, यह सुनिश्चित करने से कि Durationवस्तु के अंदर मूल्य का विघटन हो जाता है , समस्या दूर हो जाती है क्योंकि यह अब स्व-संदर्भ नहीं हो सकता है।


1
अहा - धन्यवाद! आमतौर पर राकू के साथ मुझे लगता है कि कीड़े मेरे हैं और संकलक नहीं!
p6steve

आत्म-संदर्भित प्रश्न!
एसएस ऐनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.