Возможно ли передать аргумент по имени в процедуре TCL?

#function #variables #arguments #tcl #procedure

#функция #переменные #аргументы #tcl #процедура

Вопрос:

У меня есть следующая процедура:

 proc test {a {b 10} {c 30}} {
    puts "$a $b $c"
}
 

Я хотел бы вызвать процедуру тестирования, передав значение аргументам a и c и сохранив значение по умолчанию для аргумента b. Другими словами, я хочу передать значение аргументов по имени.

Возможно ли это сделать в TCL?

Ответ №1:

Нет.

Обычный способ сделать это:

 proc test { args } {
  # set up the defaults
  set a(-a) {}
  set a(-b) 10
  set a(-c) 30
  
  set len [llength $args]
  # some basic argument checking
  if { $len > 6 || $len < 2 || $len % 2 != 0 } {
    error "Invalid arguments"
  }
  array set a $args
  ...
}

set result [test -a 3 -c 40]
 

Комментарии:

1. Это правильно. tcl::prefix Команда может быть использована для выполнения более сложной версии этого. И люди годами спорили о том, как выполнить вызов привязки по имени, но так и не был получен окончательный ответ; сложно правильно сбалансировать все различные требования.