2013-09-06 2 views
1

27025을 구축, 다음 코드는 게터 get x를 선언 라인에 구문 오류가 발생합니다 : 세터 set x가 오류를 생성하지 않습니다함수 내의 getter가 구문 오류를 생성하는 이유는 무엇입니까? 다트 편집기에서

main() { 
    var _x; 
    set x(x) => _x = x; // This is okay 
    get x => _x;  // Syntax error here 
} 

하는 것으로. Dart Editor에서이 버그입니까? 아니면 여기서 뭔가 잘못하고 있습니까?

+0

다트는 getter와 setter를 함수로 정의하므로 다른 함수에서 선언 할 수 있어야합니다. 다음은 관련 언어 사양입니다. ** 함수에는 함수 선언, 메서드, getter, setter 및 함수 리터럴이 포함됩니다. ... 게터는 객체 속성 값을 검색하는 데 사용되는 함수입니다. ... 설정자는 객체 속성의 값을 설정하는 데 사용되는 함수입니다 ** ** – Ganymede

답변

2

, 게터는 개체 속성세터의 값을 검색하는 데 사용되는 함수는 개체 속성의 값을 설정하는 데 사용되는 기능은 있습니다. 예제 코드에서 _x은 개체 속성이 아닙니다.

spec

getterSignaturesetterSignature는 클래스와 라이브러리의 최상위에 사용할 수 있습니다 보여줍니다.

놀라운 점은 set이 구문 오류를 생성하지 않는다는 것입니다.

+0

호기심에서 벗어나 게터와 설정자를 다른 격리에서 사용 하시겠습니까? 'spawnFunction()'을 사용하여'Isolate'를 만들 때, 고립 된 코드는 모두 하나의 함수 안에 들어갑니다. 맞습니까? 그래서 getter 나 setter를 사용할 수 없습니까? – Ganymede

+1

@Ganymede 아직 분리자를 사용할 기회가 없었지만,'spawnFunction()'은 최상위 함수를 인수로 취하여 그 함수로 실행을 시작하는 새로운 분리자를 생성합니다. 이 함수는 다른 함수를 호출하거나, 클래스를 참조하거나, 객체에 getter와 setter를 사용할 수 있습니다. 함수가 사용하는 모든 것을 함수 본문에 넣을 이유가 없습니다. –

+3

Getter와 Setter를 최상위 라이브러리 인 FWIW에 넣을 수 있습니다. –

0

흥미로운 점입니다. 버그는 세터에 대해 불평하지 않는다고 생각합니다. getter를 삭제하고 setter를 사용하면 실제로 실행되지 않습니다. 또는 구문 분석. 내가 생각하기에는 함수 내에서 허용되지 않는다는 것을 의미한다.

0

Dart 프로젝트 회원이 내 버그 보고서에 "getter 또는 setter를 다른 메서드 또는 함수 내에 선언하는 것은 유효하지 않습니다. 이것은 문에 대한 문법을 ​​functionSignature에 대한 localFunctionDeclaration에 따라 볼 수 있습니다

즉, setter에 대한 구문 오류가 없다는 버그입니다. " 당신이 말했듯이