我希望获得具有特定条件的所有ClassNode
字段。
在我的代码中,它看起来像这样:
listener.classNode.fields.grep {
!it.name.startsWith('$') &&
!it.name.startsWith('_') &&
!it.name.equals('metaClass') &&
!it.name.startsWith('this')
}.collect{ it.name }
有没有办法让它变得更好?我的意思是摆脱grep
块内的几个条件语句?
答案 0 :(得分:2)
您可以稍微提前获取listener.classNode.fields*.name.grep {
!it.startsWith('$') &&
!it.startsWith('_') &&
!it.equals('metaClass') &&
!it.startsWith('this')
}
值,使其缩短一点:
assert ['$a', '_a', 'metaClass', 'this', 'FOUND'].grep { n ->
!['$', '_', 'this'].any { a -> n.startsWith(a) } &&
!n.equals('metaClass')
} == ['FOUND']
当谈到条件本身时,这可能会更短一点:
"projects": [
"test",
"src",
".\\src\\Web\\Plugins"
],
请记住,后者 - 即使它更加时髦 - 人类可能不太可读,而这些人主要使用代码;)