2013-02-28 6 views
0

je suis tombé sur ce qui suit et ne peut pas comprendre ce que cette liste de paramètres signifie:liste des paramètres Tcl clarification

proc IsSpecificationLive { specificationDate { onDate "" } } 

Plus précisément, quel est le but de { onDate"" } être dans la liste des paramètres?

Répondre

2

Valeur par défaut vide pour l'argument facultatif onDate.

A partir de la page de manuel proc

Args spécifie les arguments formels de la procédure. Il consiste en une liste, éventuellement vide, dont chacun des éléments spécifie un argument. Chaque spécificateur d'argument est également une liste avec un ou deux champs. S'il n'y a qu'un seul champ dans le spécificateur, c'est le nom de l'argument; s'il y a deux champs, alors le premier est le nom de l'argument et le second est sa valeur par défaut. Les arguments dont les valeurs par défaut sont suivies d'arguments non définis par défaut deviennent des arguments obligatoires. En 8.6, cela sera considéré comme une erreur.

Exemple:

proc IsSpecificationLive { specificationDate { onDate "" } } { 
    puts $onDate 
} 

IsSpecificationLive foo bar; # outputs "bar" 
IsSpecificationLive baz; # outputs an empty line 

Voir la documentation proc pour plus de détails.

1

C'est la syntaxe des paramètres optionnels. Donc, cette procédure prend deux paramètres. Le premier est requis (specificationDate), le second est facultatif. Si la procédure est appelée avec un seul paramètre, onDate sera défini sur "". Si elle est appelée avec deux paramètres, onDate sera défini à quel que soit le second paramètre.

1

Cela vous permet d'appeler la procédure avec un seul argument, et la valeur par défaut pour onDate sera la chaîne vide. Voici un extrait d'une session interactive tclsh:

% proc IsSpecificationLive { specificationDate { onDate "" } } { 
    puts $specificationDate 
    puts $onDate 
} 
% IsSpecificationLive 
wrong # args: should be "IsSpecificationLive specificationDate ?onDate?" 
% IsSpecificationLive one two 
one 
two 
% IsSpecificationLive one 
one 

% IsSpecificationLive one two three 
wrong # args: should be "IsSpecificationLive specificationDate ?onDate?"