en utilisant « apply () » avec des méthodes qui retournent vide dans specman

StackOverflow https://stackoverflow.com/questions/1072818

  •  21-08-2019
  •  | 
  •  

Question

Specman a la méthode apply() pour effectuer la même action sur tous les éléments d'une liste:

var a: list of int;
a = somefunction.that.returns.list.of.int();
var b:= a.apply(it * 2);

Où fait la même chose a que:

for each in a {
    b.add(it.*2);
};

Maintenant, si je veux appeler une méthode sur les éléments de foo(), je peux utiliser aussi longtemps que void la méthode retourne une valeur. Cependant, si j'ai:

struct bar {
    x: int;

    foo() is {
       message(LOW, "x is ", x); 
    };
};

Et j'essaie de faire:

var a: list of bar;
a = somefunction.that.returns.list.of.bar();
a.apply(it.foo());

Il ne compile pas, parce que les rendements <=> <=>. Au lieu de cela, je dois utiliser une boucle explicite:

for each in a {
    it.foo();
};

Y at-il une méthode similaire à specman qui ne nécessite <=> pas une valeur de retour?

Était-ce utile?

La solution

Je pense que le problème fondamental est que vous voulez une mauvaise utilisation apply(). Je dirais que cette fonction a une programmation fonctionnelle fond et son but est de faire quelque chose que chaque élément d'une liste, et un nouvelle liste (comme en Python ou map Perl).

Si vous êtes intéressé par les effets secondaires d'un appel de fonction, que vous êtes si la fonction ne retourne pas de valeur, il est plus correct d'utiliser la boucle explicite. Voir aussi Y at-il une valeur en utilisant la carte () vs pour?

Cela dit, je ne peux pas penser à une autre solution pour le moment. Peut-être envelopper dans une fonction foo() de valeur de retour, mais cela semble sans aucun doute la surcharge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top