2011-10-14 3 views
1

의 내가 다음 그루비 코드가 있다고 가정 해 봅시다 :Groovy에서 클래스 내에서 선언 된 스크립트 필드에 액세스하는 방법은 무엇입니까?

def weightArg = args[0] 

class Box { 

    def width 

    def height 

    def double weight() { 
     //I want to return the value of weightArg here. How can I do that? 
    } 
} 

나는 내 수업 Box 사용 환경에서 일부 변수를 수 있도록합니다. 올바른 방법은 무엇입니까?

weightArg은 정적이어야하며 Box static initializer에서 가져올 수 있어야하지만 컴파일러를 극복 할 수는 없습니다.

답변

2

"올바른지"여부와 관계없이 Box 클래스에서 가중치 변수에 액세스 할 수있는 방법은 간단히 "def"라는 단어를 제거하는 것입니다. 그 이유는 다음과 같습니다. here.

2

스크립트 중간에서 클래스를 선언하고 스크립트 로컬 변수에 종속되도록 만드는 것은 잘못된 디자인의 확실한 신호입니다. 절차 적 프로그래밍을 고수하는 것보다이 전체 시스템을 OO 방식으로 설계 할 수 없다면. OO 프로그램을 작성하는 주된 목적은 그것들을 거의 독립적 인 부분에 인수 분해하는 것입니다. 귀하의 경우 그것은 인수 분해도 아니고 독립도 아니며 귀하가 말로 표현할 수있는 목적이 없다고 확신합니다.

중 하나는 모든에 Box 유형을 선언하거나 비슷한 방식으로 그것을하지 않습니다

class Box { 
    Box(weight) { this.weight = weight } 
    def width, height, weight 
} 

을 그리고 다음과 같이 사용 : 따라서

def box = new Box(args[0]) 

당신은 추상화 얻을 weightArgargs[0]에서 발생하며 다양한 시나리오에서이를 다시 사용할 수있게됩니다.

그렇지 않으면 첫 번째 수정 이후 관리하기 어렵고 따라서 죽어 버릴 수있는 프로그램을 망칠 수 있습니다. OO 프로그래밍의 수십 년 동안 거의 입증되었습니다.

또 다른주의해야 할 점은 스크립트에서 클래스를 소개해야한다는 느낌을 갖게되면 스크립트가 아니라 패키지와 물건이 포함 된 일반 응용 프로그램으로 프로그램을 작성해야한다는 신뢰할 수있는 신호입니다.

+0

이와 같은 자세한 답변을 보내 주셔서 감사합니다. 자바에서 꽤 좋은 경험을했지만 Groovy를 처음 사용합니다. 그래서 저는 패러다임 혼합에 대해 실험하고 있습니다. 어디에서 메소드 'weight'를 선언해야할지 모르겠습니다. Java에서 나는 모든 것을 방법으로 만들었지 만, 카레 된 매개 변수로 닫는 것이 더 멋지게 보일 것이라고 생각합니다. – Roman

+0

Java 개발자로서 Groovy에서 프로그래밍해야하는 거의 모든 것을 이미 알고 있습니다. 이전처럼 단순한 방법으로 Java의 상용구 코드를 Groovy의 간결한 솔루션으로 대체하십시오. 더 나은 패러다임을 찾지 마라. 아무도 없다. Groovy 스크립트는 테스트하지 않아도되고 30 분 내에 작성할 수 있다고 확신하는 정말 간단한 작업을위한 스크립트입니다. 귀하의 경우에는 표준'main' 메소드로 runnable 클래스를 작성하고 args4j 라이브러리를 사용할 것을 권장합니다. –

관련 문제