代码之家  ›  专栏  ›  技术社区  ›  codebox

在部分初始化对象后使用命名参数

  •  0
  • codebox  · 技术社区  · 6 年前

    我是Scala的新手,如果以下术语有误,我深表歉意。我有一个case类,有两个参数列表,比如:

    case class MyClass(a : Int, b : Int)(c: Int, d : Int, ... many others)
    

    我想定义一个函数,它返回一个部分初始化的实例,其中只提供了第一组参数:

    def buildPartial() : **something** = {
        MyClass(1, 2)
    }
    

    我希望能够在提供剩余参数时使用命名参数 buildPartial 已经完成了它的工作。

    val fullyPopulated = buildPartial()(c = 3, d = 4, ...)  
    

    这可能吗?如果可能,我怎么申报 构建部分 为了达到这个目的

    2 回复  |  直到 6 年前
        1
  •  2
  •   Tim    6 年前

    MyPartialClass ). 添加 apply 方法使创建的完整实例变得容易 MyClass

    case class MyClass(a: Int, b: Int, c: Int, d: Int, e: Int)
    
    case class MyPartialClass(a: Int, b: Int) {
      def apply(c: Int, d: Int, e: Int) = MyClass(a, b, c, d, e)
    }
    
    val partial = MyPartialClass(1, 2)
    val full: MyClass = partial(d=4, c=3, e=5)
    
        2
  •  -1
  •   Kirill Yankov    6 年前

    可以在函数中使用多个参数列表:

    case class C(a: Int)(b: Int)(c: Int)
    
    
    object O{
    
      def buildP()(b: Int, c: Int) = C(1)(b)(c)
    
      val c = buildP()(c = 2, b = 1)
    
    
    
    }