그렇지 않은 경우 수평선에 이와 같은 것이 있습니까? 이것은 내가 살 수없는 javascript/ruby / perl의 한 기능입니다. 난 당신이 해시 멤버와 함께 그것을 가짜 수 있지만 파서에서 "(일종의)"일류 "회원을 만들 수있을 줄 알았어.ruby에서 instance_variable_set 메소드의 dart에 해당하는 항목이 있습니까?
0
A
답변
2
현재 아직 존재하지 않는 필드를 설정할 수있는 것은 없습니다. mirror API은 이미 존재하는 필드를 설정하는 데 사용할 수 있으며 결국에는 새로운 필드를 동적으로 정의 할 수 있도록 확장 될 수 있습니다.
1
클래스에 "noSuchMethod"메서드를 사용하여 setter/getter를 가로 채고받은 값을지도에 저장할 수도 있습니다.
예를 들어(나는 ... 정확히 구문을 기억할 수) :
class Foo {
var _dynamicProperties = new Map<String,Object>();
noSuchMethod(String function_name, List args) {
if (args.length == 0 && function_name.startsWith("get:")) {
//synthetic getter
var property = function_name.replaceFirst("get:", "");
if (_dynamicProperties.containsKey(property)) {
return _dynamicProperties[property];
}
}
else if (args.length == 1 && function_name.startsWith("set:")) {
//synthetic setter
var property = function_name.replaceFirst("set:", "");
//if the property doesn't exist, it will only be added
_dynamicProperties[property] = args[0];
return _dynamicProperties[property];
}
super.noSuchMethod(function_name, args)
}
}
그리고 다음과 같이 당신은 당신의 코드에서 이것을 사용할 수 있습니다 : 물론
var foo = new Foo();
foo.bar = "Hello World";
print(foo.bar);
을,이 유형 검사에 의해 확인되지 않습니다 오타, 예를 들어 이어질 수 :
foo.bar = "Hello";
foo.baz = "Hello World"; // typo, meant to update foo.bar.
있습니다 방법을 사용하면 타입 검사기 버지니아가 리디렉션 팩토리 생성자와 암시 적 인터페이스를 사용하여 뚜껑을 만들었지 만 복잡해지기 시작합니다.
사이드 노트 : 이것은 JsonObject이 json 맵을 클래스 유형 구문으로 변환하는 데 사용됩니다.
차가움. 미러 API는 내가 원하는 것을하도록해야한다고 생각합니다. 나는. 클래스와 식별자를 기반으로 기본 인스턴스를 생성 한 다음 리플렉션을 사용하여 멤버를 채 웁니다. 감사! –
안녕하세요 @ 짐벨턴 (JimBelton)은 미러가 실제로는 현재 VM에 불과하다는 점에 유의하십시오. 클라이언트 또는 서버 앱을 제작하고 있습니까? –
Seth : 서버와 클라이언트 모두에서 사용할 수있는 기능에 대해 다트에 관심이 있습니다. 내가 거울에 관심이있는 부분은 파싱과 지속성입니다. 클라이언트 측은 필수는 아니지만 서버 측에서는 구문 분석을 수행해야하므로 클라이언트 측에서 나중에 볼 수 있습니다. –