2010-01-18 59 views
0

我正在寻找一个VBA实现Memento模式(GOF)的。我正在考虑转换Java版本from Wikipedia。它将用于Excel加载项的撤消/重做功能。纪念品实施VBA

具体来说,我有行难度:

return new Memento(state); 

或者,使其更加具体,可有人在VBA改写这个:

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

整个代码,我想转换可以在上面的维基百科链接中找到。

感谢

+0

你能不能多一点具体的,以什么你的问题其实是?使用'return'关键字?使用'new'运算符? – Dirk 2010-01-18 23:29:43

+0

Dirk,我已经重新编写了这个问题,并且包含了新的信息,所以希望现在您可以了解我的问题所在。 – bvukas 2010-01-19 12:41:08

回答

1

Java中的return关键字是在VBA中return关键字很大的不同。在VBA,returngosub配对为改变的过程中执行的流程的一个方式。

在Java中,return意思是“从功能退出”和或者返回一个适当的类型的值(如在你的例子),或返回任何内容(在一个void功能的情况下 - 的Java等效的Sub在VBA)。

在您的例子,它会返回Memento类型的对象。这必须是函数的返回类型或该返回类型的子类型。一个新的对象是通过使用所述关键字new(类似于在VBA中new关键字)的创建。名为state的对象作为参数传递给新对象的构造函数。

在VBA中,你可以这样写:

Function saveToMemento(state As String) As Variant 

saveToMemento = createMemento(state) 

End Function 

其中createMemento是你写来创建一个适当的结构来保存留念的信息的功能

+0

barrowc,如何创建新对象的构造函数(作为参数),或者更具体地说,如何编写createMemento函数以便模拟saveToMemento的Java代码? – bvukas 2010-01-19 13:16:50

+0

您可以在VBA中定义类,然后创建这些类的对象。 VBA没有构造函数,但可以使用'Class_Initialize()'来初始化对象。不幸的是,你不能将参数传递给那个'Sub',所以你必须调用一个单独的'Sub'来处理设置初始状态。您可能会从http://msdn.microsoft.com/en-us/library/aa227509%28VS.60%29.aspx – barrowc 2010-01-21 02:06:42

+0

得到一些想法谢谢你,你的答案是非常有用的。 – bvukas 2010-01-22 13:40:46