specman中to_string()和as_a(string)之间有什么区别?

时间:2009-09-23 09:01:55

标签: type-conversion specman

在Specman中,我可以使用以下任一项将变量转换为字符串:

x.to_string();

x.as_a(string);

这两者有什么区别吗?如果没有,为什么Specman同时提供?

1 个答案:

答案 0 :(得分:2)

as_a()允许您将表达式转换为特定类型,而不仅仅是字符串。

这些是docs

中的几个例子
list_of_int.as_a(string)
list_of_byte.as_a(string)
string.as_a(list of int)
string.as_a(list of byte)
bool = string.as_a(bool) (Only TRUE and FALSE can be converted to Boolean; all other strings return an error)
string = bool.as_a(string)
enum = string.as_a(enum)
string = enum.as_a(string) 

更新

使用as_a(string)to_string()并不总能给出相同的结果。

var s: string;
s = "hello";
var lint: list of int;
lint = s.as_a(list of int);
print lint;
print lint.as_a(string);
print lint.to_string();

这将打印出类似这样的内容:

lint =
  104
  101
  108
  108
  111
lint.as_a(string) = "hello"
list.to_string() = "104 101 108 108 111"

这是因为to_string将在列表的每个元素上运行,然后列表将与空格连接,as_a会将整数转换为字符并连接它们,为您提供{{1}单词。