سؤال

لذلك أنا جديد للغاية وعديم الخبرة في طرق برمجة TCL. لقد كتبت نصًا يدعو PROC الذي كتبه شخص آخر ، وإزالة ملف الإخراج أولاً. ثم يقوم ببعض المنطق الإضافي الذي كتبته.

لقد انتقلت المنطق إلى بروك الثاني وعلى الفور اندلعت حفنة منه (وهي أوامر RM).

من ما يمكنني قوله ، يتم تنفيذ البرنامج الأول على سطر داخل التنفيذ المركزي (النص التالي تعريف PROC) بشكل طبيعي بدون أمر "exec". ومع ذلك ، إذا قمت بنقله داخل Proc ، فإنه يحتاج الآن إلى أمر "exec".

هل يمكن لأي شخص أن يشرح لي لماذا يتصرف TCL بهذه الطريقة؟

على سبيل المثال

proc helloworld {} {
  puts "hi"
}
#works
rm my_file 
helloworld

..

proc helloworld {} {
  #doesn't work
  rm my_file 
  puts "hi"
}
helloworld

..

proc helloworld {} {
  #works
  eval rm my_file 
  puts "hi"
}
helloworld

..

proc helloworld {} {
  #works
  file delete my_file 
  puts "hi"
}
helloworld

*لاحظ أن هذا السلوك الغريب قد يكون خاصًا بالبرنامج الذي أقوم بتغذية البرنامج النصي إلى VMD ، والذي يحتوي على سلوك TCL الخاص به. ربما في ردودك ، يمكنك الإشارة إلى ما إذا كان هذا معيارًا لمترجمين الفوريين الآخرين أيضًا؟

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

المحلول

و تفاعلي ستحاول جلسة TCLSH exec أمر غير معروف (مثل rm). لا يمكنك الاعتماد على هذا السلوك في تنفيذ البرنامج النصي غير التفاعلي أو ، كما اكتشفت ، في Procs.

لا أستطيع أن أرى أن هذا موثق في tclsh صفحة الرجل ، ولكن مجهول صفحة الرجل تفعل. انظر أيضا tclsh صفحة على tcl wiki. في جلسة TCLSH التفاعلية ، يمكنك معرفة ماذا unknown يفعل عن طريق الكتابة:

info body unknown

تحديث

نقلاً عن "البرمجة العملية في TCL و TK":

ال unknown يوفر الأمر بعض وسائل الراحة الأخرى. يتم استخدام هذه فقط عند كتابة الأوامر مباشرة. يتم تعطيلها بمجرد دخول التنفيذ إلى إجراء أو إذا لم يتم استخدام قذيفة TCL بشكل تفاعلي. ميزات الراحة هي التنفيذ التلقائي للبرامج وسجل القيادة واختصار القيادة. تتم محاكمة هذه الخيارات ، إذا لم يتم تحميل تنفيذ الأوامر من مكتبة نصية.

نصائح أخرى

لاحظ أن هذا يمكن اختباره برمجيًا أيضًا ، عبر المتغير TCL_INTACTIVE, ، وهو "1" إذا تم تشغيل TCL عبر قذيفة تفاعلية ، و "0" إن لم يكن. المتغير قابل للتسوية أيضًا ، لذلك يمكن للمرء أن يبدأ قذيفة تفاعلية ، ثم اضبط TCL_INTECTACTION 0, ، والاستمرار. في هذه المرحلة ، يفقد المرء ميزات مثل

  • ال % موجه الأمر
  • Proc Name / Command Name Exext (IE: لا يمكن الكتابة PU "Xyz" والحصول على تأثير الكتابة يضع "XYZ", ، مثل قذيفة تفاعلية)
  • "قذيفة" تلقائية للحصول على أوامر خارجي تكمل طلبًا (مثل "RM" في هذا السؤال الأصلي)
  • وربما الآخرين ...

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