2015-03-30 51 views
1

我想追加到列表的ADT内部如下:追加到列表内部ADT

data MyADT = myadt(list[str] s); 
m = myadt([]); 
m.s += "test"; 

这将导致一个错误:

|prompt:///|(0,3,<1,0>,<1,3>): Expected list[str], but got str 
?[Advice](http://tutor.rascal-mpl.org/Errors/Static/UnexpectedType/UnexpectedType.html) 

这似乎像它应该工作,因为这种工作:

x = []; 
x += "test"; 

也许我在这里失去了一些东西?

谢谢!

回答

1

试试这个作为一种解决方法:

rascal>m.s += ["test"]; 
MyADT: myadt(["test"]) 

它看起来像一个错误。

顺便说一下,我们将删除+的重载以添加元素和连接列表,并引入用于添加元素的特殊操作符。它现在很混乱。

+0

只要输入'ms = ms +'test''也应该可以正常工作,很可能这是计算给定一个void容器的类型时的问题(尽管我很惊讶Rascal认为它是无效的,因为它有一个明确的类型声明)。 – 2015-03-30 20:53:11

+0

谢谢!我已经来到了这个解决方法,并认为我尝试了第二个,但我想我没有。 – josh 2015-03-31 01:34:12