Scala:如何初始化一个应该返回未来的抽象方法

时间:2015-03-10 14:49:30

标签: scala

我正在尝试解释现有Scala代码的主体。 在这个代码体系中,我有一个特性 - 我称之为MyUsefulTrait - 它声明了一些方法,我在类I中提供了一个实现混合上述特征。 我的目标只是为这些函数提供初始化,以便我的类编译。现在IDE抱怨我最好给这些方法一个实现或者声明我的类抽象。 我宁愿不宣布我的班级抽象。

Ao,这是我需要给出默认实现的方法声明: 首先。方法1如下:

def conveyFindingsOnFile: (MyFileInfo, AskReport) => FileHandledReport

其中, MyFileInfo是一个密封的特征,它定义了一些文件元数据,如路径,最后访问时及其作者。

并且,AskReport是一个案例类,它定义了一些内容,如Map,异常消息等。

最后,FileHandledReport是一个案例类,根据处理文件的一些调查结果定义了一些文件元数据等内容。

我想提供一个基本的实现或初始化,只是为了让编译器满意。


我的第二种方法如下:     
     

    def doResearch:Option[(AskReport) => Future[AskReport]]




根据我得到的第一种方法的答案,我将尝试找出第二种方法的默认实现。我会试着去。但是,是的,我希望第二种方法也可以进行一些初始化。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果你提到,你只想

  

(...)为这些函数提供初始化,以便我的类编译(...)

  

(...)让编译器开心(...)

然后您可以根据各自的返回类型使这些方法返回一些无用的值。例如,

override def conveyFindingsOnFile: (MyFileInfo, AskReport) ⇒ FileHandledReport = (a,b) ⇒ FileHandledReport(/* fill default values for the case class members here */)
override def doResearch: Option[(AskReport) ⇒ Future[AskReport]] = None

只要你不使用它们。或者,您可以使用返回类型为???的内置方法Nothing(这是任何其他类型的子类型),如果您尝试使用这些方法,则会引发NotImplementedError异常:

override def conveyFindingsOnFile: (MyFileInfo, AskReport) ⇒ FileHandledReport = ???
override def doResearch: Option[(AskReport) ⇒ Future[AskReport]] = ???

此外,这是IntelliJ IDEA的默认操作,以防您使用它。希望它有所帮助。

答案 1 :(得分:1)

第二个更容易,因为你可以简单地写

def doResearch:Option[(AskReport) => Future[AskReport]] = None

从第一个开始,你需要返回(MyFileInfo, AskReport)并返回FileHandledReport的函数。如果你知道FileHandledReport应该是什么,你可以选择:

def foo(MyFileInfo, AskReport): FileHandledReport = ... //code 
def conveyFindingsOnFile: (MyFileInfo, AskReport) => FileHandledReport = foo