كيفية تعيين القيم الافتراضية للمتغيرات تى سى ال؟

StackOverflow https://stackoverflow.com/questions/847329

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي بعض النصوص تى سى ال التي يتم تنفيذها من خلال تحديد المتغيرات في الاحتجاج سطر الأوامر:

$ tclsh84 -cmd <script>.tcl -DEF<var1>=<value1> -DEF<var2>=<value2>

هل هناك طريقة للتحقق مما إذا لم يتم تعريف VAR1 وvar2 في سطر الأوامر ثم التنازل عنها بمجموعة من القيم الافتراضية؟

وحاولت كلمات العالمي، متغير، ووضع، لكنهم جميعا تعطيني هذا الخطأ عندما أقول "if {$<var1>==""}": "can't read <var1>: no such variable"

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

المحلول

وأنا لست على دراية مع خيار -def على tclsh.

ولكن، للتحقق مما إذا تم تعيين متغير، بدلا من استخدام 'صيد'، يمكنك أيضا استخدام 'معلومات موجودة':

if { ![info exists blah] } {
  set blah default_value
}

نصائح أخرى

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

package require cmdline
set sUsage "Here you put a description of what your program does"
set sOptions {
    {inputfile.arg ""  "Input file name - this is required"}
    {outputfile.arg "out.txt"     "Output file name, if not given, out.txt will be used"}
    {compressoutput       "0"      "Binary flag to indicate whether the output file will be compressed"}
}

array set options [::cmdline::getoptions argv $sOptions $sUsage]
if {$options(inputfile) == ""} {puts "[::cmdline::usage $sOptions $sUsage]";exit}

ولاحقة .arg تشير هذه هي حجة زوج الاسم / القيمة، إذا كان ذلك غير مدرج، وسوف أفترض أنه هو العلم ثنائي.

ويمكنك catch الأمر الخاص لمنع الخطأ من إجهاض النصي.

if { [ catch { set foo $<var1> } ] } {
    set <var1> defaultValue
}

و(تحذير: أنا لم تحقق بناء الجملة الصحيح مع مترجم TCL، والسيناريو أعلاه هو فقط لإعطاء فكرة)

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