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

抽象结构类型实现

  •  0
  • Srinivas  · 技术社区  · 7 年前

    trait Test {
    
      type Foo = String => Unit
    
      def printFoo(s : Foo) = {
        println(s)
      }
    }
    

    一个简单的函数

    val foo : String => Unit = (s : String) => println(s)
    

    如何在类中实现这个函数?当我尝试的时候

      val s = new Test {
        override type Foo = String => Unit
      }
    

    并尝试实施

    s.printFoo(foo("Test"))
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   user3725190    7 年前

    因为你的方法 printFoo 获取lambda,您正在打印函数对象。 解决问题的一种方法是提供多个参数列表:

    trait Test {
    
      type Foo = String => Unit
    
      def printFoo(f: Foo)(s: String) = {
        f(s)
      }
    }
    
    val foo : String => Unit = (s : String) => println(s)
    
    val s = new Test {
      override type Foo = String => Unit
    }
    
    s.printFoo(foo)("something")
    
    // or reuse it:
    val doFoo: String => Unit = s.printFoo(foo)
    doFoo("something A...")
    doFoo("something B...")