首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类中获取修饰符

从类中获取修饰符
EN

Stack Overflow用户
提问于 2016-03-04 11:10:14
回答 1查看 120关注 0票数 1

我正在尝试从Rascal中的一个类中获取所有修饰符。

代码语言:javascript
复制
m = createM3FromEclipseProject(projectLocation);
for(cl <- classes(m)){
    set[Modifier] modi = { f | f <- m@modifiers[cl], f.scheme == "java+class"};
    println(modi);
}

这为所有类提供了一组空修饰符,但是如果我检查m@修饰符,它就不是空的。

所以m@modifierscl不会给出属于这个类的修饰符,这个类的位置是cl。如何获得这些修饰符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 20:18:21

你提出的密码出了问题。如果在REPL上一步一步地尝试这样做,您将看到原因:

对于一个示例项目,使用M3并将其提取到m模型中,我有以下内容:

代码语言:javascript
复制
rascal>classes(m)
set[loc]: {
  |java+class:///Fruit|,
  |java+class:///Apple|,
  |java+class:///HelloWorld|
}

rascal>m@modifiers
rel[loc definition,Modifier modifier]: {
  <|java+interface:///IFruit|,public()>,
  <|java+method:///HelloWorld/main(java.lang.String%5B%5D)|,static()>,
  <|java+class:///Fruit|,abstract()>,
  <|java+method:///Apple/edible()|,public()>,
  <|java+method:///Fruit/edible()|,public()>,
  <|java+class:///Apple|,public()>,
  <|java+method:///HelloWorld/main(java.lang.String%5B%5D)|,public()>,
  <|java+class:///HelloWorld|,public()>,
  <|java+method:///Fruit/edible()|,abstract()>,
  <|java+class:///Fruit|,public()>
}

因此,m@modifiers[someClass]返回一组修饰符:

代码语言:javascript
复制
rascal>m@modifiers[|java+class:///Fruit|]
set[Modifier]: {
  abstract(),
  public()
}

因此,在代码f <- m@modifiers[cl]中,f绑定到修饰符,而不是绑定到源位置。不知何故,代码不会抛出异常,而是让条件为您失败?因为我得到了这个结果:

代码语言:javascript
复制
rascal>{ f | cl <- classes(m), f <- m@modifiers[cl], f.scheme == "java+class"};
|prompt:///|(46,1,<1,46>,<1,47>): Undeclared field: scheme for Modifier
Advice: |http://tutor.rascal-mpl.org/Errors/Static/UndeclaredField/UndeclaredField.html|

如果要打印每个类的修饰符,则此代码应执行以下操作:

代码语言:javascript
复制
for (cl <- classes(m)) {
  println("modifiers for <cl> are <m@modifiers[cl]>");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35794558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档