Pregunta

Specman tiene la apply() Método para realizar la misma acción en todos los elementos de una lista:

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

Dónde apply() hace lo mismo que:

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

Ahora, si quiero llamar a un método sobre los elementos de a, Puedo usar apply() siempre que el método devuelva un valor.Sin embargo, si tengo:

struct bar {
    x: int;

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

Y trato de hacer:

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

No compila, porque foo() devoluciones void.En lugar de eso, tengo que usar un bucle explícito:

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

¿Existe un método en specman similar a apply() ¿Eso no requiere un valor de retorno?

¿Fue útil?

Solución

Creo que el problema básico aquí es que quieres hacer un mal uso apply().Yo diría que esta función tiene algo programación funcional fondo y su propósito es hacer algo que cada elemento de una lista y devolver un nuevo lista (como map en Python o Perl).

Si estas interesado en el efectos secundarios de una llamada a función, que es lo que ocurre si la función no devuelve un valor, es más correcto usar el bucle explícito.Ver también ¿Tiene algún valor usar map() vs for?

Dicho esto, no puedo pensar en una solución diferente en este momento.tal vez envolviendo foo() en una función de retorno de valor, pero esto definitivamente parece una sobrecarga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top