سؤال

لا أستطيع أن أفهم لماذا أرى هذا السلوك في PowerShell:

PS C:\> trap { "Got it!" } 1/0
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/0 <<<<

PS C:\> trap { "Got it!" } 1/$null
Got it!
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/$ <<<< null

لماذا يثير تعبير واحد الفخ والآخر لا؟

هل كانت مفيدة؟

المحلول

أود أن أعتبر أول حالتك خطأ في التحليل. هذا هو المحلل الذي يحاول القيام بطي مستمر (شحذ القيمة) والأخطاء في تلك المرحلة لأنه يحصل على قسمة على استثناء صفر. أخطاء بناء الجملة الأخرى تتصرف بنفس الطريقة ، أي أنها لا تؤدي إلى المصيدة:

trap { "Got it!" } 1/;
You must provide a value expression on the right-hand side of the '/' operator.

إذا قمت بتغيير الرمز إلى هذا:

$denom = 0
trap { "Got it!" } 1/$denom
Got it!
Attempted to divide by zero.

ثم يطلق النار على المصيدة لأن المحلل اللغوي لم يعد قادرًا على حساب القيمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top