我正在尝试解释现有Scala代码的主体。 在这个代码体系中,我有一个特性 - 我称之为MyUsefulTrait - 它声明了一些方法,我在类I中提供了一个实现混合上述特征。 我的目标只是为这些函数提供初始化,以便我的类编译。现在IDE抱怨我最好给这些方法一个实现或者声明我的类抽象。 我宁愿不宣布我的班级抽象。
Ao,这是我需要给出默认实现的方法声明: 首先。方法1如下:
def conveyFindingsOnFile: (MyFileInfo, AskReport) => FileHandledReport
其中, MyFileInfo是一个密封的特征,它定义了一些文件元数据,如路径,最后访问时及其作者。
并且,AskReport是一个案例类,它定义了一些内容,如Map,异常消息等。
最后,FileHandledReport是一个案例类,根据处理文件的一些调查结果定义了一些文件元数据等内容。
我想提供一个基本的实现或初始化,只是为了让编译器满意。
我的第二种方法如下:
def doResearch:Option[(AskReport) => Future[AskReport]]
根据我得到的第一种方法的答案,我将尝试找出第二种方法的默认实现。我会试着去。但是,是的,我希望第二种方法也可以进行一些初始化。 提前谢谢。
答案 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