2016-11-01 1 views
1

용어집 : 다중 레벨 Symbol이란 #bar와 같은 단일 레벨 대신 # Dummy.bar와 같은 의미입니다. 죄송합니다. 더 나은 이름이 무엇인지 모릅니다.다단계 기호의 사용 사례는 무엇입니까?

기호는 매우 멋지다. 내가 할 수있는 :

그것은 인쇄
class Foo { 
static String hello() => "Said hello!"; 
} 

ClassMirror clMir = reflectType(Foo) as ClassMirror(); 
print(clMir.invoke(#hello, [])); 

안녕하세요 말했다!. 큰!

그러나 하나 캔트 수행

class Bar{ 
static final Bar bar = new Bar(); 
} 

ClassMirror clMir = reflectType(Bar) as ClassMirror(); 
print(clMir.invoke(#bar.hello, [])); 

이 실패합니다.

또한, reflectSymbol(#Dummy.bar)과 같은 멀티 레벨 심볼에 대한 반사를 얻을 수있는 곳을 찾지 못했고 막대 또는 이와 유사한 것에 대한 InstanceMirror를 얻습니다.

그래서 다중 레벨 기호에 대한 사용 사례가 있습니까?

답변

1

다른 유스 케이스가 있습니다. 주로 라이브러리 이름 (library foo.bar.baz;)을 나타냅니다. 미러 시스템에서이를 사용합니다 (예 : https://api.dartlang.org/stable/1.20.1/dart-mirrors/MirrorSystem/findLibrary.html 참조).

두 번째로 미러 시스템은 정확한 클래스 또는 라이브러리 구성원 (https://api.dartlang.org/stable/1.20.1/dart-mirrors/DeclarationMirror/qualifiedName.html)을 나타 내기 위해 library.name.ClassName.memberName과 같은 "규정 된 이름"으로 미러 시스템을 사용하는 경우가 있습니다.

미러 시스템 외부에서는 그리 유용하지 않습니다.

+0

감사합니다. 다트 심볼 리터럴이 더욱 강력하여 코드 완성, 분석기 점검 및 리팩토링이 가능하기를 바랍니다. –

+0

심볼은 단지 멍청한 데이터입니다. 따라서 심볼을 완성하는 것은 실제로 실행 가능하지 않으며, 문자열 컨텐츠를 완성하는 것 이상입니다. 대부분의 사람들은 아무것도 사용하지 않아야합니다 (대부분의 사람들은 리플렉션을 사용해서는 안된다는 가정하에, 리플렉션을 사용하지 않으면 기호가 필요하지 않습니다). 'Function.apply' 함수와'noSuchMethod''Invocation' 인자는 mirrors 라이브러리 외부에있는 반사 함수이고 보통 사용자로 심볼을 만날 가능성이 가장 큽니다. – lrn

+0

필요하지 않을 때 거울을 사용하고 싶지 않습니다. 하지만 Symbol은 주석에서 매우 유용한 유스 케이스라고 생각합니다. 1. 구성원 등을 참조하는 소스 생성에서. 2. 구형 등으로 일반적으로이 경우 문자열이 사용됩니다. Symbol 리터럴이 분석기의 존재 여부 감지, IDE/분석기의 코드 완성 및 IDE/다트 도구의 refractoring을 지원하면 큰 이점이됩니다. 예 : 클래스 사용자 { 문자열 이름; 가} @EncodeField (# User.name가로 : '이름') 클래스는 시리얼이 MapSerializer는 구현 { ... } –

관련 문제