2010-01-18 2 views
0

Memento 패턴 (GoF)의 VBA 구현을 찾고 있습니다. Java 버전 from Wikipedia을 변환하려고합니다. Excel 추가 기능의 실행 취소/다시 실행 기능에 사용됩니다.Vementa의 메멘토 구현

특히, 내가 라인에 문제가 오전 :

return new Memento(state); 

또는 누군가가 VBA에서이 문제를 다시 작성할 수 있습니다, 그것은 더 구체적인 만들려면 : 내가 노력하고

public Memento saveToMemento() { 
    //System.out.println("Originator: Saving to Memento."); 
    return new Memento(state); 
} 

전체 코드를 위키 백과 링크에서 위와 같은 내용으로 변환 할 수 있습니다.

감사

+0

당신은 조금 더 구체적으로로 할 수있는 것을 실제로 당신의 문제는 무엇입니까? 'return' 키워드의 사용? 'new' 연산자의 사용? – Dirk

+0

Dirk, 나는 질문을 다시 써서 새로운 정보를 포함 시켰습니다. 이제 제 문제가 어디 있는지 이해할 수 있습니다. – bvukas

답변

1

자바의 return 키워드는 VBA에서 return 키워드와 매우 다르다. VBA에서 return은 프로 시저 내에서 실행 흐름을 변경하는 방법으로 gosub과 쌍을 이룹니다. 자바에서

return는 "기능 종료"를 의미 중 하나를 (당신의 예에서와 같이) 적절한 형식의 값을 반환하거나 아무 것도 반환하지 (A void 함수의 경우 - VBA에서 Sub의 자바 상당).

귀하의 예에서는 Memento 유형의 개체를 반환합니다. 함수의 리턴 유형이거나 해당 리턴 유형의 부속 유형이어야합니다. 새 개체는 new 키워드를 사용하여 만들어집니다 (VBA에서 new 키워드와 유사). state이라는 객체가 새 객체의 생성자에 매개 변수로 전달됩니다.

VBA에서 당신이 쓸 수 : createMemento 당신이 유품 정보를 유지하기 위해 적절한 구조를 만들 작성한 함수가

Function saveToMemento(state As String) As Variant 

saveToMemento = createMemento(state) 

End Function 

+0

barrowc, 어떻게 새 개체의 생성자를 매개 변수로 만들 수 있습니까? 더 구체적으로 말해서 createMemento 함수를 작성하여 saveToMemento에 대한 Java 코드를 에뮬레이트하는 방법은 무엇입니까? – bvukas

+0

VBA에서 클래스를 정의한 다음 해당 클래스의 개체를 만들 수 있습니다. VBA에는 생성자가 없지만'Class_Initialize()'를 사용하여 객체를 초기화 할 수 있습니다. 불행하게도'Sub'에 매개 변수를 전달할 수 없으므로 초기 상태 설정을 처리하기 위해 별도의'Sub'를 호출해야합니다. 몇 가지 아이디어를 얻을 수 있습니다 http://msdn.microsoft.com/en-us/library/aa227509%28VS.60%29.aspx – barrowc

+0

감사합니다, 당신의 대답은 매우 유용했다. – bvukas