функция для вычисления суммы заданного массива - PullRequest
0 голосов
/ 19 ноября 2018

Я новичок в Tcl, поэтому я изучаю основы.Я написал функцию для вычисления суммы массива и печати его элементов.Вот код

proc print_sum { tab } {
    set s 0
    foreach key [array names tab] {
        puts "${key}=$tab($key)"
        incr $s $tab($key)  
    }
    puts "the sum = $s"
}

Вот как я его назвал:

print_sum tab

, и я создал вкладку следующим образом:

set tab("1") 41
set tab("m2") 5
set tab("3") 3
set tab("tp") 9
set tab("2") 7
set tab("100") 16

Но выводнеправильно!Он выводит 0 вместо фактической суммы и не выводит никаких элементов.Но когда я использовал код напрямую, не записав его в функцию, он работает.

1 Ответ

0 голосов
/ 19 ноября 2018

Проблема заключается в том, что вы передаете строку «tab» в proc, а затем сохраняете ее в имени переменной «tab».Это просто обычная переменная, а не массив, поэтому, когда вы делаете array names tab, вы получаете пустой список.Цикл foreach зацикливается ноль раз, а сумма по-прежнему равна нулю.

Вам необходимо использовать команду upvar, чтобы связать массив «tab» в кадре стека вызывающей стороны:

proc print_sum { arrayName } {
    upvar 1 $arrayName a         ;# "alias" the array in the caller's scope
    set s 0
    foreach key [array names a] {
        puts "${key}=$a($key)"
        incr s $a($key)          ;# increment the *variable* not the *variablevalue*
    }
    puts "the sum = $s"
}
print_sum tab

выходы

"tp"=9
"100"=16
"1"=41
"2"=7
"3"=3
"m2"=5
the sum = 81
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...