Scala 是否提供了一种在不重复参数列表的情况下“代理”或“装饰”函数的方法?

Kla*_*ner 5 parameters proxy functional-programming scala function

我有一门名为“应用程序”(诚然愚蠢)的课程。还有一个类 ApplicationRepository 具有私有 save(Application) 方法。

我想向 ApplicationRepository 添加一个方法,该方法创建一个 Application 实例(完全来自构造函数参数)并保存它。我不想公开保存或使用应用程序类型的参数。

def createApplication(firstDay:String, lastDay:String, details:String, substitute:User, projectManager:User) = {
  val a = Application(firstDay, lastDay, details, substitute, projectManager)
  save(a)
}
Run Code Online (Sandbox Code Playgroud)

基本上我的问题可以归结为:

在 Scala 中 - 我可以创建一个具有与“代理”函数相同的参数列表的“代理”函数,传递所有参数而不关心它们,然后做不同的事情吗?

小智 -1

我认为你不能省略论据。但你应该尝试为你的类定义伴随对象:

object Application {
  def apply(firstDay:String, lastDay:String, details:String, substitute:User, projectManager:User) = {
    //place for your logic
  }
}
Run Code Online (Sandbox Code Playgroud)

这是在工厂内部隐藏构造逻辑的常见方法,Scala 为您提供了开箱即用的工厂。您还可以尝试在构造函数内使用 mixins 和动态 mixin 保存逻辑,但我认为这将是一个糟糕的设计。