سؤال

في الكود أدناه ، من أ منشور المدونة بواسطة الاسم المستعار, ، لاحظت استخدام نقطة التعجب المزدوجة !!. كنت أتساءل ماذا يعني ذلك وأين يمكنني الذهاب في المستقبل لإيجاد تفسيرات لبناء بيرل مثل هذا. (نعم ، لقد بحثت بالفعل عن !! في بيرلسين).

package Foo;

use vars qw{$DEBUG};
BEGIN {
    $DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;

sub foo {
    debug('In sub foo') if DEBUG;

    ...
}

تحديث
شكرا لجميع من إجاباتك.

هذا شيء آخر وجدته للتو مرتبط مشغل الاسكواش القائمة x!!

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

المحلول

إنه اثنان فقط ! المنطقية لا يشغلون بجوار بعضهم البعض.

سبب استخدام هذا المصطلح هو التأكد من تلقي ملف 1 أو أ 0. في الواقع ، فإنه يعيد سلسلة فارغة والتي يتم استخدامها عادةً في سياق رقمي أو منطقي.

سترى هذا في كثير من الأحيان في رمز الجولف المسابقات ، لأنها أقصر من استخدام الثلاثية ? : عامل مع 1 و 0 ($test ? 1 : 0).

!! undef  == 0
!! 0      == 0
!! 1      == 1
!! $obj   == 1
!! 100    == 1

undef ? 1 : 0  == 0
0     ? 1 : 0  == 0
1     ? 1 : 0  == 1
$obj  ? 1 : 0  == 1
100   ? 1 : 0  == 1

نصائح أخرى

ليس.

إنه يحول القيمة إلى منطقية (أو أقرب ما يصل بيرل إلى مثل هذا الشيء).

نظرًا لأن ثلاث إجابات أخرى تدعي أن النطاق هو "0" أو "1" ، فقد اعتقدت أنني أذكر أن المنطقون في بيرل (كما أعود من قبل المشغلين مثل ==, not, وما إلى ذلك) undef و 1, ، ليس 0 و 1.

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