使用“apply()”和在specman中返回void的方法

时间:2009-07-02 06:38:43

标签: list specman

Specman使用apply()方法对列表的所有元素执行相同的操作:

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

apply()的作用与:

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

现在,如果我想在a的元素上调用方法,只要方法返回一个值,我就可以使用apply()。但是,如果我有:

struct bar {
    x: int;

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

我试着这样做:

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

它无法编译,因为foo()返回void。相反,我必须使用显式循环:

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

是否有类似于apply()的specman中的方法不需要返回值?

1 个答案:

答案 0 :(得分:2)

我认为这里的基本问题是你想误用apply()。我会说这个函数有一些函数式编程背景,它的目的是为列表中的每个项做一些事情并返回一个 new 列表(如map in Python或Perl)。

如果您对函数调用的副作用感兴趣,如果函数没有返回值,那么使用显式循环更正确。另请参阅Is there a value in using map() vs for?

这说我现在想不出一个不同的解决方案。也许将foo()包装在一个返回值的函数中,但这肯定会超载。