LINUX.ORG.RU

Инициализация переменной при ее отсутствии

 


0

1

Ни как не соображу, можно ли такой код

if {![info exists var]} {                                                                                                                                         
  set var {}
}  
в виде процедуры запилить?

puts [anyProc $var]

Что бы вывело {} если нет $var и вывело сам $var, если $var есть.

★★

Последнее исправление: macumazan (всего исправлений: 1)

Так, как ты написал, нельзя. При вызове процедуры уже произойдет попытка прочитать значение переменной, и если она не определена, то все сломается. С вызовом типа [anyProc var] это возможно. Смотри документацию к команде [upvar].

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

Самое оно, спасибо!

proc nullVar {var} {
  upvar $var locVar
  if {[info exists locVar]} {
    return $locVar
  } else {
    return {}
  }
}

А такая штука tcl-специфична или такое возможно дофига в каких языках?

macumazan ★★
() автор топика
Ответ на: комментарий от macumazan

Практически в любом языке есть передача параметра по ссылке, а не по значению.

TeopeTuK ★★★★
()
Ответ на: комментарий от macumazan

можно ещё так

proc nullVar { name } {
  try { 
     uplevel set $name
  } on error msg { 
     return {}
  }
}
и даже тут «return {}» можно смело убрать. После исключения в TclResult и так пусто.

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.