加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在scala中获取方法列表

发布时间:2020-12-16 09:43:51 所属栏目:安全 来源:网络整理
导读:在像Python和ruby这样的语言中,要求语言它的字符串类支持哪些与索引相关的方法(哪些方法的名称包含单词“index”),你可以做 “”.methods.sort.grep /index/i 在java中 List results = new ArrayList(); Method[] methods = String.class.getMethods(); fo
在像Python和ruby这样的语言中,要求语言它的字符串类支持哪些与索引相关的方法(哪些方法的名称包含单词“index”),你可以做

“”.methods.sort.grep /index/i

在java中

List results = new ArrayList();  
Method[] methods = String.class.getMethods();  
for (int i = 0; i < methods.length; i++) {  
    Method m = methods[i];  
    if (m.getName().toLowerCase().indexOf(“index”) != -1) {  
        results.add(m.getName());  
    }  
}  
String[] names = (String[]) results.toArray();  
Arrays.sort(names);  
return names;

你如何在Scala中做同样的事情?

解决方法

好奇没有人尝试过更直接的翻译:

""
.getClass.getMethods.map(_.getName) // methods
.sorted                             // sort
.filter(_ matches "(?i).*index.*")  // grep /index/i

所以,一些随意的想法。

>“方法”和上面的环节之间的区别是惊人的,但没有人说过Java的力量。
>我隐藏了一些关于上面排序的内容:它实际上是一个类型为Ordering的隐式参数。如果我想自己的方法,而不是他们的名字,我必须提供它。
> grep实际上是过滤器和匹配的组合。由于Java决定要匹配整个字符串,即使没有指定^和$,因此更复杂一些。我认为在正则表达式上使用一个grep方法是有意义的,它将Traversable作为参数,但…

所以,我们可以做些什么呢?

implicit def toMethods(obj: AnyRef) = new { 
  def methods = obj.getClass.getMethods.map(_.getName)
}

implicit def toGrep[T <% Traversable[String]](coll: T) = new {
  def grep(pattern: String) = coll filter (pattern.r.findFirstIn(_) != None)
  def grep(pattern: String,flags: String) = {
    val regex = ("(?"+flags+")"+pattern).r
    coll filter (regex.findFirstIn(_) != None)
  }
}

现在这是可能的:

"".methods.sorted grep ("index","i")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读