Special name for an argument to a proc - if it's last in the argument list, it will contain a list (possibly empty) of all the remaining arguments.
proc demo {first {second "none"} args} { puts "first = $first" puts "second = $second" puts "args = $args" } demo one demo one two demo one two three four five
results in:
first = one second = none args = first = one second = two args = first = one second = two args = three four five
example args
Class Club -parameter {id {name unknown}} Class Player -superclass Club -parameter {{name unknown} {position unknown}} Player proc show_players '''args''' { if { [string length $args] == 0} { puts "Show players DB" foreach p [my info instances] { puts "[$p name] [$p position]" } return } set pos [string toupper $args] puts "Players with postition $pos:" foreach p [my info instances] { foreach char [split $pos {}] { if {[string first $char [$p position]] == 1} { puts "[$p name] [$p position]" break } } } }
Is it just me, or is that a pretty poor example of args? for one, it uses rather unconventional quoting (what's with all the single quotes?). Second, you do [string length $args] and [string toupper $args] but you firmly established that args is a list, not a string. It is generally accepted as bad practice to perform string operations on lists.
See also magic names.