Scalar
পুশ করার পরে কখন এবং কেন কোনও ধাক্কা পাত্রে রাখা মানটি প্রভাবিত হয় তা বুঝতে আমার সমস্যা হয় have আমি দুটি স্টাইলাইজড উদাহরণে আরও জটিল প্রসঙ্গে যে ইস্যুটি ছড়িয়েছি তা বোঝানোর চেষ্টা করব।
* উদাহরণ 1 * প্রথম উদাহরণে, স্কেলারকে a এর অংশ হিসাবে $i
একটি অ্যারেতে ঠেলাঠেলি করা হয় । পুশ করার পরে, স্কেলারের দ্বারা ধারণকৃত মানটি নির্দেশ ব্যবহার করে লুপটির পরবর্তী পুনরাবৃত্তিতে স্পষ্টত আপডেট করা হয় । এই আপডেটগুলির অ্যারের মানটির উপরে প্রভাব রয়েছে : লুপের শেষে, সমান , আর নেই ।@b
List
$i++
@b
@b[0;0]
3
2
my @b;
my $i=0;
for 1..3 -> $x {
$i++;
say 'Loose var $i: ', $i.VAR.WHICH, " ", $i.VAR.WHERE;
if $x == 2 {
@b.push(($i,1));
say 'Pushed $i : ', @b[0;0].VAR.WHICH, " ", @b[0;0].VAR.WHERE;
}
}
say "Post for-loop";
say "Array : ", @b;
say 'Pushed $i : ', @b[0;0].VAR.WHICH, " ", @b[0;0].VAR.WHERE;
আউটপুট উদাহরণ 1:
Loose var $i: Scalar|94884317665520 139900170768608
Loose var $i: Scalar|94884317665520 139900170768648
Pushed $i : Scalar|94884317665520 139900170768648
Loose var $i: Scalar|94884317665520 139900170768688
Post for-loop
Array : [(3 1)]
Pushed $i : Scalar|94884317665520 139900170768688
* উদাহরণ 2 * দ্বিতীয় উদাহরণে, স্কেলারটি $i
লুপ ভেরিয়েবল। যদিও $i
এটি ধাক্কা দেওয়ার পরে আপডেট করা হয়েছে (এখন স্পষ্ট করে না বলে স্পষ্টভাবে), $i
অ্যারের মধ্যে মানটির
ধাক্কা পরেও পরিবর্তন @c
হয় না ; অর্থাত্ লুপের পরে এটি এখনও রয়েছে 2
, নেই 3
।
my @c;
for 1..3 -> $i {
say 'Loose var $i: ', $i.VAR.WHICH, " ", $i.VAR.WHERE;
if $i == 2 {
@c.push(($i,1));
say 'Pushed $i : ', @c[0;0].VAR.WHICH, " ", @c[0;0].VAR.WHERE;
}
}
say "Post for-loop";
say "Array : ", @c;
say 'Pushed $i : ', @c[0;0].VAR.WHICH, " ", @c[0;0].VAR.WHERE;;
আউটপুট উদাহরণ 2:
Loose var $i: Scalar|94289037186864 139683885277408
Loose var $i: Scalar|94289037186864 139683885277448
Pushed $i : Scalar|94289037186864 139683885277448
Loose var $i: Scalar|94289037186864 139683885277488
Post for-loop
Array : [(2 1)]
Pushed $i : Scalar|94289037186864 139683885277448
প্রশ্ন: কেন $i
এ @b
সময়, উদাহরণস্বরূপ 1 ধাক্কা পর আপডেট মধ্যে $i
মধ্যে @c
উদাহরণস্বরূপ 2 নয়?
সম্পাদনা : @ টিমোটিমোর মন্তব্যের পরে আমি .WHERE
উদাহরণগুলির আউটপুটকে অন্তর্ভুক্ত করেছি । এটি (WHICH / যৌক্তিক) স্কেলার-পরিচয়টি $i
একই রকমের দেখায় যা এর স্মৃতি ঠিকানাটি বিভিন্ন লুপ পুনরাবৃত্তির মাধ্যমে পরিবর্তিত হয়। তবে এটি ব্যাখ্যা করে না যে উদাহরণস্বরূপ 2 টি ধাক্কা স্কেলারটি পুরানো ঠিকানার ("448) এর সাথে মিল রেখে একই WHICH- পরিচয়ের সাথে কেন আবদ্ধ থাকে।
.WHERE
পরিবর্তে ব্যবহার করেন তবে.WHICH
দেখতে পাচ্ছেন যে স্কেলারটি প্রতিটি সময় লুপের চারপাশে আসলে একটি আলাদা অবজেক্ট। এটি ঘটে কারণ পয়েন্টি ব্লকগুলিকে "ডাকা হয়" এবং প্রতিটি কলটিতে স্বাক্ষর "আবদ্ধ" থাকে।