سؤال

ما هو السبب التاريخي إلى أن last ويسمى هذا في بيرل بدلا من break كما يطلق عليه في ج ؟

تصميم بيرل تأثر ج (بالإضافة إلى awk ، sed و sh - انظر صفحة أدناه) ، لذلك يجب أن يكون هناك بعض المنطق وراء عدم الذهاب مع مألوفة ج-نمط تسمية كسر/الماضي.

قليلا من التاريخ من بيرل 1.000 (صدر في 18 كانون الأول / ديسمبر 1987) صفحة:

[Perl] يجمع (في رأي المؤلف ، على أي حال) بعض من أفضل الميزات من C, sed, awk ، ش ، لذلك الناس على دراية مع هذه اللغات ينبغي أن يكون قليلا صعوبة في ذلك.(اللغة المؤرخين أيضا ملاحظة بعض بقايا csh, باسكال, وحتى BASIC|PLUS.)

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

المحلول

دلالات 'كسر' أو 'آخر' ، تعريف اللغة (في هذه الحالة بيرل) وليس لك.

لماذا لا نفكر في 'آخر' كما "هذا هو البيان الأخير لخوض حلقة".

انه دائما يبدو لي غريبا أن "تواصل" البيان في 'ج' يبدأ تمرير المقبل من حلقة.هذا هو بالتأكيد غريبة استخدام مفهوم "تواصل".ولكن هذا هو دلالات 'ج' ، لذلك أنا أقبل ذلك.

من خلال محاولة خريطة معينة مفاهيم البرمجة في واحد الكلمات الإنجليزية مع القائمة معنى هناك دائما ما تكون نوعا ما من غير متطابقة غرائب

المصدر

بالإضافة إلى لاري الجدار هو غريب.هل رأيت صورته ؟

Larry Wall
(المصدر: wired.com)

نصائح أخرى

وأتوقع أن هذا هو لأنه تم إنشاء بيرل التي كتبها لغوي، وليس عالم الكمبيوتر. في استخدام اللغة الإنجليزية العادي، ومفهوم معلنا أنك قد أكملت تمرير النهائي الخاص بك من خلال حلقة يتم توصيل أكثر بشدة على كلمة "مشاركة" ( "هذا هو آخر تمرير") بدلا من كلمة " كسر "(" <م> كسر حلقة <م> كسر للخروج من حلقة "؟"؟ "- ليس من الواضح حتى كيف" ويقصد كسر "لتتصل الخروج من حلقة).

ومصطلح "آخر" أكثر منطقية عندما تتذكر أنه يمكنك استخدامه مع أكثر من مجرد السيطرة حلقات المباشرة. يمكنك تطبيقه على كتل المسمى واحد أو أكثر من مستويات أعلى كتلة هو في:

 LINE: while( <> ) {
      WORD: foreach ( split ) {
           last LINE if /^__END__\z/;
           ...
           }
      }

ويقرأ أكثر من الطبيعي أن نقول "آخر" في اللغة الإنجليزية عند قراءتها بأنها "السطر الأخير إذا كان يتطابق مع ...".

هناك سبب إضافي قد ترغب في النظر في:

آخر يفعل أكثر من مجرد حلقة التحكم.

sub hello {
  my ( $arg ) = @_; 

  scope: { 
      foo(); 
      bar(); 
      last if $arg > 4; 
      baz(); 
      quux(); 
  }
}

الماضي كما هو التحكم في التدفق الآلية لا تقتصر على حلقات.بينما بالطبع, يمكنك التعميم أعلاه وحلقة الذي يمتد على أكثر 1 مرات غياب حلقة لي يشير إلى "كسر ؟ ماذا يمكننا الخروج؟"

بدلا من ذلك, أنا أفكر "last"كما "القفز إلى موقف آخر هدفين" ، التي تعد لهذا الغرض ، أكثر لغويا معقولة.

كنت أسأل نفس السؤال داميان كونواي عن say.بيرل 6 سوف أعرض say, الذي هو ليس أكثر من print تلقائيا يضيف السطر.سؤالي كان لماذا لا ببساطة استخدام echo, لأن هذا هو ما echo لا في باش (وربما في أماكن أخرى).

كان جوابه: echo 33% أطول من say.

لديه وجهة نظر.:)

ولأنه يذهب الى الاخير من الحلقة. ولأن لاري ستريت كان رجل غريب.

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