如何选择组合项目?

时间:2014-12-08 14:09:31

标签: rascal

假设我有

combo(["A","B","C","D"])

如何选择项目B.是否有像selectIndex(2)或selectItem(“B”)这样的属性?

我找不到这样的财产。

2 个答案:

答案 0 :(得分:1)

我假设你有一个像这样声明的数据类型:

data C = combo(list[str] items);

和这样的值(与你的问题对齐):

rascal>c = combo(["A","B","C","D"]);
C: combo(["A","B","C","D"])

鉴于此,您可以通过多种方式获得列表中的第二项。如果您为combo中保存的数据指定了字段名称(上面是items),您可以这样说(记住Rascal中的列表是0索引的):

rascal>c.items[1];
str: "B"

如果你没有给它一个名字,但又不想这样做,你也可以使用匹配来做到这一点:

rascal>if (combo(l) := c) println(l[1]);
B

变量l将绑定到combo内的列表;然后在if内可以使用这个新变量。当然,在这两种情况下,您都希望确保列表足够长,因此在尝试读取第二个元素时不会出错。您还可以执行以下操作,它使用嵌套列表匹配:

rascal>if (combo([s1,s2,s*]) := c) println(s2);
B

在这种情况下,s1将在列表的第一个元素中找到,s2到第二个元素,s到任意内容(0或更多,这是{ {1}}表示以下内容。因为只有在*中保存的列表长度至少为2时才会匹配,因此您无需单独检查。

答案 1 :(得分:0)

默认情况下,第一个条目看起来是硬连线:https://github.com/cwi-swat/rascal/blob/master/src/org/rascalmpl/library/vis/figure/interaction/swtwidgets/Combo.java#L40

因此,选择所需项目的唯一方法是使用您想要选择的第一项创建组合。