[SCALA] 스칼라의 방법 목록을 얻는 방법
SCALA스칼라의 방법 목록을 얻는 방법
(메소드의 이름은 단어 "인덱스"를 포함)의 문자열 클래스가 지원하는 당신이 할 수있는 인덱스 관련 방법 파이썬과 루비 같은 언어에서 언어를 물어
“”.methods.sort.grep /index/i
그리고 자바
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;
어떻게 스칼라에서 같은 일을 할 것인가?
해결법
-
==============================
1.아무도 더 직접적인 번역을 시도 없다고 호기심 :
아무도 더 직접적인 번역을 시도 없다고 호기심 :
"" .getClass.getMethods.map(_.getName) // methods .sorted // sort .filter(_ matches "(?i).*index.*") // grep /index/i
그래서, 어떤 임의의 생각.
그래서, 여기에 우리가 그것에 대해 할 수있는 작업은 다음과 같습니다
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")
-
==============================
2.당신은 스칼라 REPL 프롬프트를 사용할 수 있습니다. ""를 입력, 목록을 예를 들어 문자열 개체의 멤버 방법을 찾을 수 있습니다. (- 당신이 좋아하는 경우 다음 점 Tab 키를 눌러 다음으로, 또는 비 비어있는 빈 문자열이다) 한 다음 Tab 키를 누릅니다. REPL은 당신을 위해 모든 구성원 방법을 나열합니다.
당신은 스칼라 REPL 프롬프트를 사용할 수 있습니다. ""를 입력, 목록을 예를 들어 문자열 개체의 멤버 방법을 찾을 수 있습니다. (- 당신이 좋아하는 경우 다음 점 Tab 키를 눌러 다음으로, 또는 비 비어있는 빈 문자열이다) 한 다음 Tab 키를 누릅니다. REPL은 당신을 위해 모든 구성원 방법을 나열합니다.
이뿐만 아니라 다른 변수 유형에 적용됩니다.
-
==============================
3.더 많은 이하 같은 방법 :
더 많은 이하 같은 방법 :
val names = classOf[String].getMethods.toSeq. filter(_.getName.toLowerCase().indexOf(“index”) != -1). map(_.getName). sort(((e1, e2) => (e1 compareTo e2) < 0))
그러나 모든 한 줄에.
좀 더 쉽게 읽을 수 있도록하기 위해,
val names = for(val method <- classOf[String].getMethods.toSeq if(method.getName.toLowerCase().indexOf("index") != -1)) yield { method.getName } val sorted = names.sort(((e1, e2) => (e1 compareTo e2) < 0))
-
==============================
4.자, 잠깐.
자, 잠깐.
나는 자바 자세한 루비와 비교 예를 들어 인정.
그러나 코드의 조각은 처음에 너무 장황하지 않았을 것이다.
여기에 상응입니다 :
Collection<String> mds = new TreeSet<String>(); for( Method m : "".getClass().getMethods()) { if( m.getName().matches(".*index.*")){ mds.add( m.getName() ); } }
어느 올바른로 표시 스칼라 버전과 문자의 거의 같은 수 있습니다
-
==============================
5.내가 가진 이것은까지입니다 :
내가 가진 이것은까지입니다 :
"".getClass.getMethods.map(_.getName).filter( _.indexOf("in")>=0)
이 정렬 방법이없는 이상한 스칼라 배열입니다.
편집하다
이처럼 끝날 것입니다.
"".getClass.getMethods.map(_.getName).toList.sort(_<_).filter(_.indexOf("index")>=0)
-
==============================
6.스칼라 클래스가 여전히 JVM의 것들로 그냥 직접 자바 코드를 사용하여, 당신 대부분이 방식을 얻을 것이다. 당신 수 포트 스칼라 코드를 아주 쉽게뿐만 아니라,하지만, REPL에서 사용의 재미 / 연습 / 용이성.
스칼라 클래스가 여전히 JVM의 것들로 그냥 직접 자바 코드를 사용하여, 당신 대부분이 방식을 얻을 것이다. 당신 수 포트 스칼라 코드를 아주 쉽게뿐만 아니라,하지만, REPL에서 사용의 재미 / 연습 / 용이성.
from https://stackoverflow.com/questions/2886446/how-to-get-methods-list-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 불변의 목록에서 "제거"하나 개의 요소에 관용적 스칼라 방법은 무엇입니까? (0) | 2019.11.26 |
---|---|
[SCALA] 스칼라는 미래의 순서를 기다리고 (0) | 2019.11.26 |
[SCALA] 스칼라의 동적 유형의 실제 사용 (0) | 2019.11.26 |
[SCALA] 스칼라 소스 코드 변환에 자바를 자동화? [닫은] (0) | 2019.11.26 |
[SCALA] 무엇 컬렉션에 대한 전망은 때 당신이 그들을 사용할까요? (0) | 2019.11.26 |